it-swarm.com.ru

Измените имя Laravel, созданного и обновленного

Могу ли я отобразить временные метки Laravel из:

created_at to post_date и post_date_gmt?

updated_at to post_modified и post_modified_gmt?


Я переношу приложение Wordpress в Laravel.

Я получаю доступ к копии базы данных Wordpress, используя Laravel. Реальная версия базы данных все еще используется, поэтому я не хочу менять схему.

Таблица сообщений имеет post_date, post_date_gmt, post_modified и post_modified_gmt, но Laravel ожидает created_at и updated_at.

Есть ли способ изменить имена столбцов, которые ищет Laravel?

Я бы хотел, чтобы Laravel обновил временные метки всех столбцов, которые уже есть.

30
user1894292

Принятый ответ может вызвать проблемы с обновлением временных меток, к сожалению.

Вам лучше переопределить констант на вашей модели:

const CREATED_AT = 'post_date';
const UPDATED_AT = 'post_modified';

тогда методы getCreatedAtColumn и getUpdatedAtColumn будут возвращать post_date и post_modified соответственно, но не причинят вреда.

Для других столбцов вам нужно использовать такие события, как @Oni.

59
Jarek Tkaczyk

Если вы посмотрите на источник класса 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

19
Oni

Вы можете попробовать использовать атрибут 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');
    }
}

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

0
alexrussell