SearchUpdateListener.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. <?php
  2. namespace App\Search\Listeners;
  3. use App\Search\Events\SearchUpdateEvent;
  4. use Illuminate\Contracts\Queue\ShouldQueue;
  5. use Illuminate\Support\Facades\Log;
  6. /**
  7. * 模型更新事件
  8. * Class SearchUpdateListener
  9. * @package App\Search\Listeners
  10. * Auth Zhong
  11. * Date 2019/1/22
  12. */
  13. class SearchUpdateListener implements ShouldQueue
  14. {
  15. /**
  16. * 处理事件.
  17. *
  18. * @param SearchUpdateEvent $event
  19. * @return void
  20. */
  21. public function handle(SearchUpdateEvent $event)
  22. {
  23. $model=app($event->changeModel);
  24. if ($event->type == SearchUpdateEvent::OPERATE_UPDATE) {
  25. $model->where(function ($query) use ($event) {
  26. if (!is_array($event->where)) {
  27. $query->whereIn('id', explode(',', $event->where));
  28. } else {
  29. foreach ($event->where as $value) {
  30. $method = array_shift($value);
  31. $query->{$method}(...array_values($value));
  32. }
  33. }
  34. })->searchable();
  35. } elseif ($event->type == SearchUpdateEvent::OPERATE_DELETE) {
  36. $model->withTrashed()->where(function ($query) use ($event) {
  37. if (!is_array($event->where)) {
  38. $query->whereIn('id', explode(',', $event->where));
  39. } else {
  40. foreach ($event->where as $value) {
  41. $method = array_shift($value);
  42. $query->{$method}(...array_values($value));
  43. }
  44. }
  45. })->unsearchable();
  46. }
  47. }
  48. }