【发布时间】:2020-09-06 20:41:15
【问题描述】:
我有一个名为“资源”的模型。
通过使用此命令
php artisan make:observer ResourceObserver --model=Resource
这个命令创建一个新文件,我更新created,updated函数并更新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';
}
}
请帮忙?!
【问题讨论】: