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
此命令创建一个新文件,我更新 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';
}
}
有什么帮助吗?!
通过 Eloquent 发出批量更新或删除时,不会触发 saved
、updated
、deleting
和 deleted
模型事件对于受影响的模型。这是因为在发出批量更新或删除时从未真正检索到模型。
所以,在 ResourceObserver
中,我刚刚将方法从 updated
更改为 updating
,
和 created
到 creating
我有一个名为“Resource”的模型。
通过使用这个命令
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';
}
}
有什么帮助吗?!
通过 Eloquent 发出批量更新或删除时,不会触发 saved
、updated
、deleting
和 deleted
模型事件对于受影响的模型。这是因为在发出批量更新或删除时从未真正检索到模型。
所以,在 ResourceObserver
中,我刚刚将方法从 updated
更改为 updating
,
和 created
到 creating