Я сейчас конвертирую одно из наших веб-приложений с CodeIgniter в Laravel. Однако в данный момент мы не хотим добавлять поля updated_at
/ created_at
ко всем нашим таблицам, поскольку у нас есть класс ведения журнала, который уже делает все это более подробно за нас.
Я знаю, что могу установить $timestamps = false;
:
Vendor\laravel\framework\src\illuminate\Datebase\Eloquent\Model.php
Однако я бы предпочел не менять основной файл для Laravel, иначе он должен быть у всех моих моделей вверху. Есть ли способ отключить это где-либо еще для всех моделей?
$timestamps = false;
, например, к семени таблице , которая не имеет никакогоcreated_at
иupdated_at
поле.Просто поместите эту строку в свою модель :
public $timestamps = false;
Вот и все!
Пример:
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { public $timestamps = false; // }
Чтобы отключить отметки времени для одной операции (например, в контроллере):
$post->content = 'Your content'; $post->timestamps = false; // Will not modify the timestamps on save $post->save();
Чтобы отключить временные метки для всех ваших моделей , создайте новый
BaseModel
файл:<?php namespace App; use Illuminate\Database\Eloquent\Model; class BaseModel extends Model { public $timestamps = false; // }
Затем расширьте каждую из ваших моделей
BaseModel
, например:<?php namespace App; class Post extends BaseModel { // }
источник
Если вы используете 5.5.x:
const UPDATED_AT = null;
А для поля created_at вы можете использовать:
const CREATED_AT = null;
Убедитесь, что вы используете последнюю версию. (Это было сломано в Laravel 5.5.0 и снова исправлено в 5.5.5).
источник
Если вам нужно только отключить обновление updated_at, просто добавьте этот метод в свою модель.
public function setUpdatedAtAttribute($value) { // to Disable updated_at }
Это переопределит родительский метод setUpdatedAtAttribute (). created_at будет работать как обычно. Таким же образом вы можете написать метод для отключения обновления только created_at.
источник
Красноречивая модель:
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();
источник
Если вы хотите удалить временные метки из существующей модели, как упоминалось ранее, поместите это в свою модель:
public $timestamps = false;
Также создайте миграцию со следующим кодом в
up()
методе и запустите ее:Schema::table('your_model_table', function (Blueprint $table) { $table->dropTimestamps(); });
Вы можете использовать
$table->timestamps()
в своемdown()
методе возможность отката.источник
просто объявите
public
переменную timestamps в вашемModel
to,false
и все будет отлично работать.public $timestamps = false;
источник
Добавьте эту строку в свою модель:
/** * Indicates if the model should be timestamped. * * @var bool */ public $timestamps = false;
источник
Переопределите функции
setUpdatedAt()
иgetUpdatedAtColumn()
в вашей моделиpublic function setUpdatedAt($value) { //Do-nothing } public function getUpdatedAtColumn() { //Do-nothing }
источник
Вы можете временно отключить отметки времени
$timestamps = $user->timestamps; $user->timestamps=false; // avoid view updating the timestamp $user->last_logged_in_at = now(); $user->save(); $user->timestamps=$timestamps; // restore timestamps
источник