У меня есть приложение Laravel для свойств, скажем, где-то в моем коде я:Бесконечного цикл при прослушивании модели события
$property = new Property();
$property->city = "New York";
...
$property->save();
Тогда я прослушиватель события, ожидающий определенное событие:
$events->listen(
'eloquent.saved: Properties\\Models\\Property',
'Google\Listeners\[email protected]'
);
И, наконец, в SetGeoLocationInfo.php
у меня есть
public function fire($event)
{
$property = $event;
...
//get GPS data from Google Maps
$property->latitude = $googleMapsObject->latitude;
$property->longitude = $googleMapsObject->longitude;
$property->save();
}
И когда я сохранить модель в идет в конечная рекурсия, из-за save()
, вызванного в обработчике.
Как я могу изменить свой код, чтобы он заполнил данные о местоположении только один раз после сохранения и избежать рекурсии?
Я не могу использовать flushEventListeners()
, потому что в этом случае другие слушатели перестают работать (например, имущество фото есть).
при стрельбе, используйте сохранение, вместо того, чтобы сохранить – Farkie
Просто переопределить метод сохранения в собственности - передавать аргументы для режима экономии. В fire() вот так: $ property-> save (Свойство :: SAVE_FROM_GOOGLE_FIRE); для другого чего-то большего. – Deep