/home/bdqbpbxa/api-uniferx.goodface.com.ua/vendor/laravel/nova/src/Query/Search.php
<?php

namespace Laravel\Nova\Query;

use Illuminate\Database\Eloquent\Builder;
use Laravel\Nova\Query\Search\Column;

class Search
{
    /**
     * The Eloquent Query Builder instance.
     *
     * @var \Illuminate\Database\Eloquent\Builder
     */
    public $queryBuilder;

    /**
     * The search keyword.
     *
     * @var string
     */
    public $searchKeyword;

    /**
     * Create a new search builder instance.
     *
     * @param  \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Relations\Relation  $queryBuilder
     * @param  string  $searchKeyword
     * @return void
     */
    public function __construct($queryBuilder, $searchKeyword)
    {
        $this->queryBuilder = $queryBuilder;
        $this->searchKeyword = $searchKeyword;
    }

    /**
     * Get the raw results of the search.
     *
     * @param  class-string<\Laravel\Nova\Resource>  $resourceClass
     * @param  array<int, string|\Laravel\Nova\Query\Search\Column>  $searchColumns
     * @return mixed
     */
    public function handle($resourceClass, array $searchColumns)
    {
        return $this->queryBuilder->where(function ($query) use ($searchColumns) {
            $connectionType = $query->getModel()->getConnection()->getDriverName();

            collect($searchColumns)
                ->each(function ($column) use ($query, $connectionType) {
                    if ($column instanceof Column || (! is_string($column) && is_callable($column))) {
                        $column($query, $this->searchKeyword, $connectionType);
                    } else {
                        Column::from($column)->__invoke($query, $this->searchKeyword, $connectionType);
                    }
                });
        });
    }
}