Laravel 7.x 观察者未保存,created_by updated_by 用户

Laravel 7.x Observer not saving, created_by updated_by user

我有一个名为“Resource”的模型。

通过使用这个命令

php artisan make:observer ResourceObserver --model=Resource

此命令创建一个新文件,我更新 createdupdated 函数并更新 constructor

<?php

namespace App\Observers;

use App\Resource;

class ResourceObserver
{
    protected $userID;

    public function __construct()
    {
        $this->userID = auth()->user()->id;
    }

    /**
     * Handle the resource "created" event.
     *
     * @param  \App\Resource  $resource
     * @return void
     */
    public function created(Resource $resource)
    {
        $resource->created_by = $this->userID;
    }

    /**
     * Handle the resource "updated" event.
     *
     * @param  \App\Resource  $resource
     * @return void
     */
    public function updated(Resource $resource)
    {
        $resource->updated_by = $this->userID;
    }

    /**
     * Handle the resource "deleted" event.
     *
     * @param  \App\Resource  $resource
     * @return void
     */
    public function deleted(Resource $resource)
    {
        //
    }

    /**
     * Handle the resource "restored" event.
     *
     * @param  \App\Resource  $resource
     * @return void
     */
    public function restored(Resource $resource)
    {
        //
    }

    /**
     * Handle the resource "force deleted" event.
     *
     * @param  \App\Resource  $resource
     * @return void
     */
    public function forceDeleted(Resource $resource)
    {
        //
    }
}

这是我的迁移:

    public function up()
    {
        Schema::create('resources', function (Blueprint $table) {
            $table->id();
            // some fields here
            $table->foreignId('created_by')->nullable()->default(null)->constrained('users')->onDelete('set null');
            $table->foreignId('updated_by')->nullable()->default(null)->constrained('users')->onDelete('set null');
            $table->timestamps();
        });
    }

那么你应该像这样在 AppServiceProvider 中注册观察者:

use App\Observers\ResourceObserver;
use App\Resource;
public function boot()
{
    Schema::defaultStringLength(191);
    Resource::observe(ResourceObserver::class);
}

现在更新任何记录时都会出现问题,因为它没有保存 user_id

更新我在ResourceController

中使用update函数
public function update(Request $request, Resource $resource)
{
    $validations = [
        // some validations
    ];
    $request->validate($validations);

    try {
        if (!empty($resource)) {
            $resource->field_a = $request->field_a;
            $resource->field_b = $request->field_b;
            $resource->field_c = $request->field_c;
            $resource->save();
            return 'done messge';
        } else {
            return 'error message';
        }
    } catch (\Exception $e) {
        return 'bug message';
    }
}

有什么帮助吗?!

通过 Eloquent 发出批量更新或删除时,不会触发 savedupdateddeletingdeleted 模型事件对于受影响的模型。这是因为在发出批量更新或删除时从未真正检索到模型。

所以,在 ResourceObserver 中,我刚刚将方法从 updated 更改为 updating, 和 createdcreating