Отключить метки времени 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