ElasticsearchSearchable.php 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Search\Traits;
  3. use App\Search\Builders\ElasticsearchBuilder;
  4. use Closure;
  5. use Laravel\Scout\Builder;
  6. use Laravel\Scout\Searchable;
  7. trait ElasticsearchSearchable
  8. {
  9. use Searchable;
  10. /**
  11. * Get the index name for the model.
  12. *
  13. * @return string
  14. */
  15. public function searchableAs()
  16. {
  17. return config('scout.elasticsearch_index_prefix').$this->search_index;
  18. }
  19. /**
  20. * Perform a search against the model's indexed data.
  21. *
  22. * @param string $query
  23. * @param Closure $callback
  24. * @return ElasticsearchBuilder
  25. */
  26. public static function search($query = '', $callback = null)
  27. {
  28. return app(ElasticsearchBuilder::class, [
  29. 'model' => new static,
  30. 'query' => $query,
  31. 'callback' => $callback,
  32. 'softDelete'=> config('scout.soft_delete', false)
  33. ]);
  34. }
  35. /**
  36. * Get the requested models from an array of object IDs;
  37. *
  38. * @param \Laravel\Scout\Builder $builder
  39. * @param array $ids
  40. * @return mixed
  41. */
  42. public function getScoutModelsByIds(Builder $builder, array $ids)
  43. {
  44. $query = $this->newQuery();
  45. if ($builder->queryCallback) {
  46. call_user_func($builder->queryCallback, $query);
  47. }
  48. return $query->whereIn($this->getScoutKeyName(), $ids)->get();
  49. }
  50. }