Laravelのタイムスタンプを以下からマップできますか?
created_at
からpost_date
およびpost_date_gmt
?
updated_at
からpost_modified
およびpost_modified_gmt
?
WordpressアプリケーションをLaravelに移行しています。
Laravelを使用してWordpressデータベースのコピーにアクセスしています。データベースのライブバージョンはまだ使用中であるため、スキーマを変更したくありません。
投稿テーブルにはpost_date
、post_date_gmt
、post_modified
およびpost_modified_gmt
、ただしLaravelはcreated_at
およびupdated_at
。
とにかくLaravelが探す列名を変更する必要がありますか?
Laravel=既に存在するすべての列のタイムスタンプを更新したいです。
受け入れられた回答は、残念ながらタイムスタンプの更新で問題を引き起こす可能性があります。
モデルのconstをオーバーライドする方が良いでしょう:
const CREATED_AT = 'post_date';
const UPDATED_AT = 'post_modified';
メソッドgetCreatedAtColumn
およびgetUpdatedAtColumn
はそれぞれpost_date
およびpost_modified
を返しますが、害はありません。
他の列には、@ Oniのようなイベントを使用する必要があります。
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
を調べたいかもしれません。良いスタートです
これをテーブルモデルファイルに入れるだけで、
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';
}
属性ゲッターとゲッターを使用してみてください:
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');
}
}
これが機能するかどうかはわかりませんが、試してみてください。たぶん継続するためのベース-あなたはそれで遊んでいる必要があります。