Intereting Posts
Разрешить пользователю добавлять поля в форму, созданную с помощью Zend Framework Как установить сеанс в базе данных codeigniter 3? Implode и Explode Многомерные массивы Могу ли я иметь метод класса, который включает файл заголовка для меня в PHP? Должен ли я хранить хэши для паролей? Проблема включения mod_rewrite с css file_put_contents () выдает ошибку при попытке экспорта изображения У вставки codeigniter вставки_statch () с тысячами вставок нет пропущенных записей Проверьте, нет ли электронной почты в базе данных с помощью подготовленных инструкций i18n и сообщения об ошибках в Kohana 3 Как хранить несколько значений для одного элемента в ячейке в MySQL Динамическое изменение подключения к базе данных в cakephp 3 WordPress – Как добавить привязку к ссылкам предыдущей / следующей страницы Как я могу получить сообщение об ошибке для функции mail ()? Почему этот запрос показывает только один результат?

Как заполнить modified_by с помощью user_id того, кто сделал обновление записи, используя laravel 5.1?

При использовании Laravel 5.1 я пытаюсь создать Observer, который автоматически обновит следующие 3 столбца

  1. created_by: заполнить, когда созданная запись «никогда не обновляет это снова»
  2. modify_by: заполнять новое значение каждый раз, когда запись изменяется
  3. purged_by: заполнять значение, когда запись мягко удаляется.

Я понимаю, что Eloquent автоматически обновит отметку времени даты (created_by, updated_at, deleted_at), но мне нужно обновить user_id, который внес изменения.

Мне было рекомендовано использовать Observer и черту, чтобы справиться с этим. Вот что я сделал

1) создал класс наблюдателя под названием «ModelSignature», расположенный в app\Observers\ModelSignature.php и это его содержимое

 <?php namespace App\Observers; class ModelSignature { protected $userID; public function __construct(){ $this->userID = Auth::id(); } public function updating($model) { $model->modified_by = $this->userID; } public function creating($model) { $model->created_by = $this->userID; } public function removing($model) { $model->purged_by = $this->userID; } } 

Затем я создал новый признак под названием «RecordSignature», расположенный в app\Traits\RecordSignature.php и содержащий следующий код

 <?php namespace App\Traits; use app\Observers\ModelSignature; trait RecordSignature { public static function bootObservantTrait() { static::observe(new ModelSignature() ); } } 

Наконец, в моей модели «Учетная запись», расположенной на «app \ Models \ Account.php», я использую ее так:

 <?php namespace App\Models; use Illuminate\Database\Eloquent\Model; use App\Models\industry; use App\Traits\RecordSignature; use App\Traits\TrimScalarValues; class Account extends Model { use RecordSignature, TrimScalarValues; /** * The database table used by the model. * * @var string */ protected $table = 'accounts'; protected $primaryKey = 'account_id'; const CREATED_AT = 'created_on'; const UPDATED_AT = 'modified_on'; const REMOVED_AT = 'purged_on'; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = ['client_id','account_name', 'company_code', 'legal_name', 'created_by','modified_by','instrucations']; /** * The attributes excluded from the model's JSON form. * * @var array */ //protected $hidden = ['account_id', 'remember_token']; protected $guarded = ['account_id']; /** * Get the industry record associated with the account. */ public function industry() { return $this->hasOne(industry, industry::primaryKey); } public function pk(){ return $this->primaryKey; } } 

Проблема в том, что методы updating() , removing() и creating() не заполняют userId, как ожидалось. Кажется, что поля игнорируются или методы не увольняются!

Что я здесь делаю неправильно?

Related of "Как заполнить modified_by с помощью user_id того, кто сделал обновление записи, используя laravel 5.1?"

Вы должны быть в состоянии избавиться от своего класса ModelSignatures и изменить свой признак на что-то вроде:

 trait RecordSignature { protected static function boot() { parent::boot(); static::updating(function ($model) { $model->modified_by = \Auth::User()->id; }); static::creating(function ($model) { $model->created_by = \Auth::User()->id; }); //etc } } 

Надеюсь это поможет!

Я предлагаю вам использовать ревизионный пакет для венчурного бизнеса с этим обновлением https://github.com/fico7489/laravel-revisionable-upgrade

Все будет работать из коробки, вам просто нужно использовать 2 черты, вы можете сделать гораздо больше, чтобы получить информацию, кто отредактировал модель, вы можете получить информацию, которая отредактировала конкретный столбец, даже особую ценность и многое другое …