Красноречиво, как сделать что-то при удалении или обновлении оперирования специальной моделью - PullRequest
0 голосов
/ 10 января 2019

Большая часть моей таблицы БД содержит create_user_id и update_user_id

Как я могу обновить эти два поля автоматически, если я использую save(), update(), insert(), createOrUpdate() и т. Д.

Например, я выполняю этот скрипт:

$model = Model::find(1);
$model->model_f = 'update';
$model->save();

затем обновляется model_f этой записи и обновляется update_user_id.

Я знаю, что eloquent может управлять update_time автоматически, и я уже использовал его. Но я хочу сделать что-то еще при обновлении или вставке или удалении

PS: у меня есть константа с именем USERID, чтобы запомнить идентификатор текущего пользователя

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Существует довольно простой способ автоматического обновления create_user_id и update_user_id

Step1:

Откройте папку приложения и создайте новый файл с именем UserStampsTrait.php

Step:2

и вставьте следующий код

<?php
namespace App;
use Illuminate\Support\Facades\Auth;    
trait UserStampsTrait
{
 public static function boot()
  {
    parent::boot();
    // first we tell the model what to do on a creating event
    static::creating(function($modelName='')
    {
       $createdByColumnName = 'create_user_id ';
      $modelName->$createdByColumnName = Auth::id();
    });

    // // then we tell the model what to do on an updating event
    static::updating(function($modelName='')
    {
      $updatedByColumnName = 'update_user_id';
      $modelName->$updatedByColumnName = Auth::id();
    });    
  }
}

Вот так

Step:3

Откройте вашу модель, которой необходимо автоматически обновить соответствующие модели

Например, это может быть Post

<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use App\UserStampsTrait;
class Post extends Model
{
    use UserStampsTrait;
}

Вот так

0 голосов
/ 10 января 2019

Вы можете использовать Наблюдатели . Вы можете подключить к вашей модели следующие события:

retrieved  
creating
created
updating
updated
saving
saved
deleting
deleted
restoring
restored

Позвольте мне привести пример, где мы пытаемся подключиться к событиям, генерируемым моделью App/User. Вы можете изменить это, чтобы соответствовать вашей конкретной модели позже.

Чтобы создать наблюдателя, выполните следующую команду:

php artisan make:observer UserObserver --model=User

Тогда вы можете подключиться к конкретным событиям в вашем наблюдателе.

<?php

namespace App\Observers;

use App\User;

class UserObserver
{

    /**
    * Handle the User "saved" event.
    *
    * @param  \App\User  $user
    * @return void
    */
    public function saved(User $user)
    {
        //
    }


    /**
    * Handle the User "created" event.
    *
    * @param  \App\User  $user
    * @return void
    */
    public function created(User $user)
    {
        //
    }

    /**
    * Handle the User "updated" event.
    *
    * @param  \App\User  $user
    * @return void
    */
    public function updated(User $user)
    {
        //
    }

}

Поскольку в вашем конкретном случае вы хотите подключиться к этим 3 событиям, вы можете определить вышеописанные события и выполнить дополнительные операции с вашей моделью при вызове этих событий.

Не забудьте зарегистрировать этого наблюдателя в своем AppServiceProvider.

<?php

namespace App\Providers;

use App\User;
use App\Observers\UserObserver;
use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    /**
    * Bootstrap any application services.
    *
    * @return void
    */
    public function boot()
    {
        User::observe(UserObserver::class);
    }

    /**
    * Register the service provider.
    *
    * @return void
    */
    public function register()
    {
        //
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...