webentwicklung-frage-antwort-db.com.de

Ändern Sie den Namen von Laravels Created_at und Updated_at

Kann ich die Zeitstempel von Laravel zuordnen:

created_at zu post_date und post_date_gmt?

updated_at zu post_modified und post_modified_gmt?


Ich migriere eine Wordpress-Anwendung zu Laravel.

Ich greife mit Laravel auf eine Kopie der Wordpress-Datenbank zu. Die Live-Version der Datenbank wird noch verwendet, daher möchte ich das Schema nicht ändern.

Die Tabelle Posts enthält post_date, post_date_gmt, post_modified und post_modified_gmt, aber Laravel erwartet created_at und updated_at.

Gibt es überhaupt eine Änderung der Spaltennamen, nach denen Laravel sucht?

Ich möchte, dass Laravel die Zeitstempel aller bereits vorhandenen Spalten aktualisiert.

30
user1894292

Die akzeptierte Antwort kann leider Probleme beim Aktualisieren von Zeitstempeln verursachen.

Sie sollten Konstanten in Ihrem Modell besser überschreiben:

const CREATED_AT = 'post_date';
const UPDATED_AT = 'post_modified';

dann geben die Methoden getCreatedAtColumn und getUpdatedAtColumnpost_date und post_modified zurück, schaden jedoch nicht.

Für die anderen Spalten müssen Sie Ereignisse wie @Oni verwenden.

59
Jarek Tkaczyk

Wenn Sie in die Quelle der Eloquent-Klasse schauen

https://github.com/illuminate/database/blob/4.2/Eloquent/Model.php#L223-L235

Sie sollten diese Spaltennamen leicht ändern können, indem Sie diese Konstanten überschreiben.

<?php

class YourModel extends Eloquent {

    /**
     * The name of the "created at" column.
     *
     * @var string
     */
    const CREATED_AT = 'post_date';

    /**
     * The name of the "updated at" column.
     *
     * @var string
     */
    const UPDATED_AT = 'post_modified';

}

In Bezug auf die _gmt-Version dieser Zeitstempel möchten Sie möglicherweise events prüfen. Hier ist ein guter Anfang

http://driesvints.com/blog/using-laravel-4-model-events

19
Oni

Fügen Sie dies einfach in Ihre Tabellenmodelldatei ein.

 const CREATED_AT = 'your_custom_created_at_field_name';
 const UPDATED_AT = 'your_custom_updated_at_field_name';

Mein Modell sieht so aus, um Verwirrungen zu vermeiden

class diarymodule extends Model
{
    protected $table = 'diarymodule';
    const CREATED_AT = 'CreatedDate';
    const UPDATED_AT = 'UpdatedDate';
}
1

Sie können versuchen, das Attribut Getter und Getter zu verwenden:

class Post extends Eloquent
{
    public function getCreatedAtAttribute()
    {
        return $this->attributes['post_date'];
    }

    public function setCreatedAtAttribute($value)
    {
        $this->attributes['post_date'] = $value;

        // this may not work, depends if it's a Carbon instance, and may also break the above - you may have to clone the instance
        $this->attributes['post_date_gmt'] = $value->setTimezone('UTC');
    }
}

Ich weiß nicht, ob das funktionieren wird, aber Sie könnten es versuchen. Sicher eine Basis, auf der man vielleicht weitermachen kann - man muss damit herumspielen.

0
alexrussell