Что Laravel красноречивый отключить все метки


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

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

VendorlaravelframeworksrcilluminateDatebaseEloquentModel.php

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

8 117

8 ответов:

вы либо должны объявить 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 только.

Если вы используете 5.5.x:

const UPDATED_AT = null;

и для поля 'created_at', вы можете использовать:

const CREATED_AT = null;

убедитесь, что вы находитесь на последней версии. (Это было сломано в Laravel 5.5.0 и исправлено снова в 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 = 'johndoe@example.com';
$users->save();

переопределить функции setUpdatedAt() и getUpdatedAtColumn() модели

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

public function getUpdatedAtColumn()
{
    //Do-nothing
}

просто объявить public переменной типа timestamp в false и все будет работать отлично.

public $timestamps = false;

Если вы хотите удалить временные метки из существующей модели, как упоминалось ранее, поместите это в свою модель:

public $timestamps = false;

также создайте миграцию со следующим кодом в методе up () и запустите его:

Schema::table('your_model_table', function (Blueprint $table) {
    $table->dropTimestamps();
});