Измените имя Laravel created_at и updated_at
Можно ли сопоставить метки времени Laravel с:
created_at
до post_date
и post_date_gmt
?
updated_at
до post_modified
и post_modified_gmt
?
Я переношу приложение Wordpress в Laravel.
Я получаю доступ к копии базы данных Wordpress с помощью Laravel. Живая версия базы данных все еще используется, поэтому я не хочу менять схему.
Таблица Posts имеет post_date
, post_date_gmt
, post_modified
и post_modified_gmt
, но Laravel ожидает created_at
и updated_at
.
Можно ли изменить имена столбцов, которые ищет Laravel?
Я бы хотел, чтобы Laravel обновил метки времени всех столбцов, которые уже есть.
Ответы
Ответ 1
Принятый ответ может вызвать проблемы с обновлением временных меток.
Лучше переопределить константы в вашей модели:
const CREATED_AT = 'post_date';
const UPDATED_AT = 'post_modified';
тогда методы getCreatedAtColumn
и getUpdatedAtColumn
возвратят post_date
и post_modified
соответственно, но не нанесут никакого вреда.
Для других столбцов вам нужны такие события, как @Oni.
Ответ 2
Если вы посмотрите на источник класса 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
Ответ 3
Вы можете попробовать использовать атрибуты 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 a Carbon instance, and may also break the above - you may have to clone the instance
$this->attributes['post_date_gmt'] = $value->setTimezone('UTC');
}
}
Я не знаю, будет ли это работать, но вы могли бы отдать это. Конечно, база, на которой можно пойти, может быть, вам придется поиграть с ней.