web-dev-qa-db-ja.com

Laravelのcreated_atとupdated_atの名前を変更する

Laravelのタイムスタンプを以下からマップできますか?

created_atからpost_dateおよびpost_date_gmt

updated_atからpost_modifiedおよびpost_modified_gmt


WordpressアプリケーションをLaravelに移行しています。

Laravelを使用してWordpressデータベースのコピーにアクセスしています。データベースのライブバージョンはまだ使用中であるため、スキーマを変更したくありません。

投稿テーブルにはpost_datepost_date_gmtpost_modifiedおよびpost_modified_gmt、ただしLaravelはcreated_atおよびupdated_at

とにかくLaravelが探す列名を変更する必要がありますか?

Laravel=既に存在するすべての列のタイムスタンプを更新したいです。

38
user1894292

受け入れられた回答は、残念ながらタイムスタンプの更新で問題を引き起こす可能性があります。

モデルのconstをオーバーライドする方が良いでしょう:

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

メソッドgetCreatedAtColumnおよびgetUpdatedAtColumnはそれぞれpost_dateおよびpost_modifiedを返しますが、害はありません。

他の列には、@ Oniのようなイベントを使用する必要があります。

64
Jarek Tkaczyk

Eloquentクラスのソースを調べると

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

これらの定数をオーバーライドすることで、これらの列名を非常に簡単に変更できるはずです。

<?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';

}

_gmtそれらのタイムスタンプのバージョン、eventsを調べたいかもしれません。良いスタートです

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

20
user3774430

これをテーブルモデルファイルに入れるだけで、

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

混乱を避けるため、私のモデルはこのように見えます

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

属性ゲッターとゲッターを使用してみてください:

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');
    }
}

これが機能するかどうかはわかりませんが、試してみてください。たぶん継続するためのベース-あなたはそれで遊んでいる必要があります。

0
alexrussell