Подтвердить что ты не робот

Измените имя Laravel created_at и updated_at

Можно ли сопоставить метки времени 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 обновил метки времени всех столбцов, которые уже есть.

4b9b3361

Ответ 1

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

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

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

тогда методы getCreatedAtColumn и getUpdatedAtColumn возвратят post_date и post_modified соответственно, но не нанесут никакого вреда.

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

Ответ 2

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

Ответ 3

Вы можете попробовать использовать атрибуты 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 a Carbon instance, and may also break the above - you may have to clone the instance
        $this->attributes['post_date_gmt'] = $value->setTimezone('UTC');
    }
}

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