Измените имя 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, Вот хорошее начало

http://driesvints.com/blog/using-laravel-4-model-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');
    }
}

Я не знаю, сработает ли это, но вы можете попробовать. Конечно, база, на которую можно пойти, - вам придется поиграть с ней.

Другие вопросы по тегам