Laravel 观察者不处理批量插入

Ami*_*ier 5 php observable laravel

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

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;
     }
}
Run Code Online (Sandbox Code Playgroud)

Tra*_*itz 5

此行为是预期的,并记录在鲜红色警告中:

当通过 Eloquent 发布批量更新时, 不会为更新的模型触发savedupdated模型事件。这是因为在发布批量更新时实际上从未检索到模型。

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

如果您需要在创建模型时调度事件,那么您必须一一保存它们:

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

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