如何解决Laravel 7.x观察者未保存,由用户创建_更新
我有一个名为“资源”的模型。
使用此命令
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
要更新,我在update
中使用ResourceController
功能
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发布批量更新或删除时,不会为受影响的模型触发saved
,updated
,deleting
和deleted
模型事件。这是因为发布批量更新或删除时实际上从未检索过模型。
因此,在ResourceObserver
中,我刚刚从updated
的方法更改为updating
,
和created
至creating
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。