我可以从以下位置映射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更新已经存在的所有列的时间戳。
答案 0 :(得分:63)
不幸的是,接受的答案可能会导致更新时间戳的问题。
您最好覆盖模型上的consts:
const CREATED_AT = 'post_date';
const UPDATED_AT = 'post_modified';
然后方法getCreatedAtColumn
和getUpdatedAtColumn
将分别返回post_date
和post_modified
,但不会造成任何伤害。
对于其他列,您需要使用@Oni建议的事件。
答案 1 :(得分:19)
如果你查看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
。这是一个好的开始
答案 2 :(得分:0)
您可以尝试使用getters和getters属性:
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');
}
}
我不知道这是否有效,但你可以试一试。当然可能是一个基础 - 你必须要玩它。
答案 3 :(得分:0)
只需将其放入表格模型文件中
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';
}