laravel - Laravel 7.x Observer 未保存,created_by updated_by 用户
问题描述
我有一个名为“资源”的模型。
通过使用此命令
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
和model 事件。deleted
这是因为在发布批量更新或删除时从未真正检索到模型。
所以,在ResourceObserver
我刚刚从方法更改为updated
,updating
和created
creating
推荐阅读
- php - 使用包含表单数据的数组更新数据库
- javascript - 在 ChartJS 散点图中移动零线
- javascript - 使用 onscroll 或类似事件滚动到元素
- java - 我如何使用 For 嵌套循环打印这个?
- php - 将正常运行时间存储在数据库中
- reactjs - CSSTransition 持续时间不起作用
- sql - 案例优先级查询中的 PostgreSQL 问题
- ios - 带有 SearchButtons 的 UISeachController 栏向错误的方向增长
- java - 无法使用 zap-java-api 执行 zap 蜘蛛扫描
- vba - 选择不连续的单元格并粘贴到下一个空白行的特定列