Могу ли я сопоставить метки времени 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'); } }
Я не знаю, будет ли это работать, но вы могли бы уйти. Конечно, база, на которой можно пойти, может быть, вам придется поиграть с ней.