Я в процессе преобразования одного из наших веб-приложений от CodeIgniter в Laravel. Однако в настоящий момент мы не хотим добавлять поля updated_at
/created_at
ко всем нашим таблицам, так как у нас есть класс ведения журнала, который делает все это более подробно для нас уже.
Я знаю, что я могу установить $timestamps = false;
в:
Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php
Однако я бы предпочел не менять основной файл для Laravel, или у всех из моих моделей есть то, что наверху. Есть ли способ отключить это в других местах для всех моделей?
Вам либо нужно объявить public $timestamps = false;
в каждой модели, либо создать базовую модель, определить ее там, а все ваши модели расширить ее, а не красноречиво. Просто голова в сводных таблицах ДОЛЖНА иметь метки времени, если вы используете Eloquent.
Обновление: обратите внимание, что временные метки больше не требуются в сводных таблицах после Laravel v3.
Обновление. Вы также можете отключить отметки времени, удалив $table->timestamps()
из вашей миграции.
Просто разместите public $timestamps = false;
в своей модели.
Если вам нужно только отключить обновление updated_at, просто добавьте этот метод в свою модель.
public function setUpdatedAtAttribute($value)
{
// to Disable updated_at
}
Это переопределит родительский метод setUpdatedAtAttribute(). created_at будет работать как обычно. Аналогичным образом вы можете написать метод для отключения обновления только created_at.
Переопределите функции setUpdatedAt()
и getUpdatedAtColumn()
в вашей модели
public function setUpdatedAt($value)
{
//Do-nothing
}
public function getUpdatedAtColumn()
{
//Do-nothing
}
Элегантная модель:
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();