Наблюдатель Laravel не работает над массовой вставкой - PullRequest
0 голосов
/ 26 февраля 2019

Я должен сохранить данные навалом. Данные сохраняются, но наблюдатель не работает.Я перепробовал все методы наблюдателя (создан, создан, сохранен, сохранен), но ответа не было.

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;
     }
}

1 Ответ

0 голосов
/ 26 февраля 2019

Такое поведение ожидается и задокументировано в ярко-красном предупреждении:

При выпуске массового обновления через Eloquent события модели saved и updated не будут запускаться для обновленных моделей.,Это происходит потому, что модели никогда не извлекаются при массовом обновлении.

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

Это связано с тем, что базовый запрос SQL, который Eloquent генерирует для оператора массовой вставки / обновленияотличается от запроса на обновление одной строки, и в результате Eloquent не может получить список вставленных идентификаторов из запроса.

Если вам нужно отправить события, созданные моделью, вам нужновместо этого сохраняйте модели по очереди:

foreach($departments as $department) {
        Jobdescription::create([
             'department_id' => $department,
             'name'          => $name,
             'description'   => $description,
         ]);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...