gpt4 book ai didi

php - Laravel 观察者不处理批量插入

转载 作者:搜寻专家 更新时间:2023-10-31 20:57:24 24 4
gpt4 key购买 nike

我必须批量保存数据。数据正在保存,但观察者不工作。我尝试了观察者的所有方法(创建、创建、保存、保存)但没有任何反应。

foreach( $departments as $department) {
$data[] = [
'department_id' => $department,
'name' => $name,
'description' => $description,
];
}

if(count($data) > 0) {
JobDescription::insert($data);
}

namespace App\Observers;
use Auth;

class JobDescriptionObserver
{
public function created($model)
{
echo 'created';
die;
}
}

最佳答案

这种行为是预期的,并记录在一个鲜红色的警告中:

When issuing a mass update via Eloquent, the saved and updatedmodel events will not be fired for the updated models. This is becausethe models are never actually retrieved when issuing a mass update.

https://laravel.com/docs/5.7/eloquent#events

如果您需要在创建模型时分派(dispatch)事件,那么您必须将它们一一保存:

foreach($departments as $department) {
Jobdescription::create([
'department_id' => $department,
'name' => $name,
'description' => $description,
]);
}

批量插入和更新行为不同的原因是因为批量插入/更新的底层 SQL 查询不同于更新单行的查询。批量更新不允许 Eloquent 从查询结果中检索 ID 列表,这意味着它不知道更新了哪些模型,因此无法为每个模型发送一个事件。另一方面,单行更新允许 Eloquent 从查询结果中获取 lastInsertId

关于php - Laravel 观察者不处理批量插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54879160/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com