Отключить метки времени Laravel Rouquent
Я в процессе преобразования одного из наших веб-приложений от CodeIgniter в Laravel. Однако в настоящий момент мы не хотим добавлять поля updated_at
/created_at
ко всем нашим таблицам, так как у нас есть класс ведения журнала, который делает все это более подробно для нас уже.
Я знаю, что я могу установить $timestamps = false;
в:
Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php
Однако я бы предпочел не менять основной файл для Laravel, или у всех из моих моделей есть то, что наверху. Есть ли способ отключить это в других местах для всех моделей?
Ответы
Ответ 1
Вам либо нужно объявить public $timestamps = false;
в каждой модели, либо создать базовую модель, определить ее там, а все ваши модели расширить ее, а не красноречиво. Просто голова в сводных таблицах ДОЛЖНА иметь метки времени, если вы используете Eloquent.
Обновление: обратите внимание, что временные метки больше не требуются в сводных таблицах после Laravel v3.
Обновление. Вы также можете отключить отметки времени, удалив $table->timestamps()
из вашей миграции.
Ответ 2
Просто разместите public $timestamps = false;
в своей модели.
Ответ 3
Если вам нужно только отключить обновление updated_at, просто добавьте этот метод в свою модель.
public function setUpdatedAtAttribute($value)
{
// to Disable updated_at
}
Это переопределит родительский метод setUpdatedAtAttribute(). created_at будет работать как обычно.
Аналогичным образом вы можете написать метод для отключения обновления только created_at.
Ответ 4
Если вы используете 5.5.x:
const UPDATED_AT = null;
А для поля "create_at" вы можете использовать:
const CREATED_AT = null;
Убедитесь, что вы используете новейшую версию. (Это было сломано в Laravel 5.5.0 и снова исправлено в 5.5.5).
Ответ 5
Элегантная модель:
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();
Ответ 6
Если вы хотите удалить временные метки из существующей модели, как упоминалось ранее, поместите это в вашу модель:
public $timestamps = false;
Также создайте миграцию со следующим кодом в методе up()
и запустите его:
Schema::table('your_model_table', function (Blueprint $table) {
$table->dropTimestamps();
});
Вы можете использовать $table->timestamps()
в вашем методе down()
чтобы разрешить откат.
Ответ 7
просто объявите переменную public
timestamps в вашей Model
как false
и все будет отлично работать.
public $timestamps = false;
Ответ 8
Добавьте эту строку в вашу модель:
Overwrite existing variable $timestamps
true to false
/**
* Indicates if the model should be timestamped.
*
* @var bool
*/
public $timestamps = false;
Ответ 9
Переопределите функции setUpdatedAt()
и getUpdatedAtColumn()
в вашей модели
public function setUpdatedAt($value)
{
//Do-nothing
}
public function getUpdatedAtColumn()
{
//Do-nothing
}
Ответ 10
Вы можете временно отключить временные метки
$timestamps = $user->timestamps;
$user->timestamps=false; // avoid view updating the timestamp
$user->last_logged_in_at = now();
$user->save();
$user->timestamps=$timestamps; // restore timestamps