Измените имя Laravel, созданного и обновленного
Могу ли я отобразить временные метки Laravel из:
created_at
в post_date
а также post_date_gmt
?
updated_at
в post_modified
а также post_modified_gmt
?
Я переношу приложение Wordpress в Laravel.
Я получаю доступ к копии базы данных Wordpress, используя Laravel. Реальная версия базы данных все еще используется, поэтому я не хочу менять схему.
Таблица сообщений имеет post_date
, post_date_gmt
, post_modified
а также post_modified_gmt
Ларавел ожидает created_at
а также updated_at
,
Есть ли способ изменить имена столбцов, которые ищет Laravel?
Я бы хотел, чтобы Laravel обновил временные метки всех столбцов, которые уже есть.
3 ответа
Принятый ответ может вызвать проблемы с обновлением временных меток, к сожалению.
Вам лучше переопределить констант на вашей модели:
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
Вы сможете легко изменить имена этих столбцов, переопределив эти константы.
<?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';
}
Вы можете попробовать использовать атрибут getter и getter:
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');
}
}
Я не знаю, сработает ли это, но вы можете попробовать. Конечно, база, на которую можно пойти, - вам придется поиграть с ней.