add nova
This commit is contained in:
59
nova/src/Query/Search.php
Normal file
59
nova/src/Query/Search.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?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);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user