Отключить метки времени Laravel Eloquent

73

Я в процессе преобразования одного из наших веб-приложений от CodeIgniter в Laravel. Однако в настоящий момент мы не хотим добавлять поля updated_at/created_at ко всем нашим таблицам, так как у нас есть класс ведения журнала, который делает все это более подробно для нас уже.

Я знаю, что я могу установить $timestamps = false; в:

Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php

Однако я бы предпочел не менять основной файл для Laravel, или у всех из моих моделей есть то, что наверху. Есть ли способ отключить это в других местах для всех моделей?

Теги:
eloquent

5 ответов

152
Лучший ответ

Вам либо нужно объявить public $timestamps = false; в каждой модели, либо создать базовую модель, определить ее там, а все ваши модели расширить ее, а не красноречиво. Просто голова в сводных таблицах ДОЛЖНА иметь метки времени, если вы используете Eloquent.

Обновление: обратите внимание, что временные метки больше не требуются в сводных таблицах после Laravel v3.

Обновление. Вы также можете отключить отметки времени, удалив $table->timestamps() из вашей миграции.

  • 1
    Не знаю, почему я никогда не думал о создании BaseModel и установке его там. Работает красиво. Просто примечание в соответствии с документацией сводных таблиц нужно только в том случае, если установка с помощью Timestamps () сейчас (не знаю, если это изменилось по сравнению с предыдущими версиями)
  • 0
    Не знал о методе withTimestamps (). Мне нужно разобраться в этом.
Показать ещё 2 комментария
57

Просто разместите public $timestamps = false; в своей модели.

  • 1
    Спасибо, работает как по волшебству :)
12

Если вам нужно только отключить обновление updated_at, просто добавьте этот метод в свою модель.

public function setUpdatedAtAttribute($value)
{
    // to Disable updated_at
}

Это переопределит родительский метод setUpdatedAtAttribute(). created_at будет работать как обычно. Аналогичным образом вы можете написать метод для отключения обновления только created_at.

  • 1
    Это сработало для меня, потому что установка $ timestamps = false привела к тому, что метод create_at-> diffForHumans () перестал работать, так как он больше не является экземпляром углерода.
1

Переопределите функции setUpdatedAt() и getUpdatedAtColumn() в вашей модели

public function setUpdatedAt($value)
{
   //Do-nothing
}

public function getUpdatedAtColumn()
{
    //Do-nothing
}
  • 15
    Случай "это работает, но никто в здравом уме не сделает этого"
0

Элегантная модель:

class User extends Model    
{      
    protected $table = 'users';

    public $timestamps = false;
}

Или просто попробуйте

$users = new Users();
$users->timestamps = false;
$users->name = 'John Doe';
$users->email = '[email protected]';
$users->save();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню