У меня есть черта ActionLogTrait, которая выглядит следующим образом;
<?php
namespace App\Helpers;
trait ActionLogTrait
{
public static function bootActionLogTrait()
{
self::updated(function($model){
$model->update([
'updated_by' => auth()->user()->id,
]);
});
}
}
Я добавил эту черту в свою Posts-модель.
Но когда я выполняю обновление этой модели Posts с PostController с $post->update(['name' => $request->name]);, мой SQL перестает делать что-либо на несколько минут. Как будто он в петле или что-то в этом роде. Обновление отлично работает без использования трейта.
Что я делаю не так?






Вы застряли в бесконечном цикле, потому что обновляете модель после того, как происходит событие обновления, поэтому запускаете другое событие обновления, которое снова обновляет модель и так далее ...
Вы должны обновлять поле updated_by всякий раз, когда сообщение обновляется в контроллере. Не как черта, которая на самом деле является наблюдателем. Другой вариант - иметь промежуточную таблицу, в которой хранится история пост-обновлений, и в этом случае вы можете использовать наблюдателя для обновления этой таблицы.
Исправил с небольшой проверкой if ($model->updated_by !== auth()->user()->id) { }
Омг, ты абсолютно прав. Как я могу это преодолеть? Любые идеи?