Могу ли я сопоставить метки времени 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 обновил отметки времени всех столбцов, которые уже есть.
К сожалению, принятый ответ может вызвать проблемы с обновлением временных меток.
Вам лучше переопределить consts на вашей модели:
const CREATED_AT = 'post_date'; const UPDATED_AT = 'post_modified';
то методы getCreatedAtColumn
и getUpdatedAtColumn
будут возвращать post_date
и post_modified
соответственно, но не 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
. Вот хорошее начало
Вы можете попробовать использовать атрибуты 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'); } }
Я не знаю, будет ли это работать, но вы могли бы уйти. Конечно, база, на которой можно пойти, может быть, вам придется поиграть с ней.