/home/bdqbpbxa/api-uniferx.goodface.com.ua/vendor/laravel/nova/src/Query/Search/Column.php
<?php
namespace Laravel\Nova\Query\Search;
use Illuminate\Database\Query\Expression;
class Column
{
/**
* The search column.
*
* @var \Illuminate\Database\Query\Expression|string
*/
public $column;
/**
* Construct a new search.
*
* @param \Illuminate\Database\Query\Expression|string $column
* @return void
*/
public function __construct($column)
{
$this->column = $column;
}
/**
* Create Column instance for raw expression value.
*
* @param string $column
* @return mixed
*/
public static function raw($column)
{
return new static(new Expression($column));
}
/**
* Create Column instance from raw expression or fluent string.
*
* @param \Illuminate\Database\Query\Expression|string $column
* @return mixed
*/
public static function from($column)
{
if ($column instanceof Expression) {
return new static($column);
}
if (strpos($column, '->') !== false) {
return new SearchableJson($column);
} elseif (strpos($column, '.') !== false) {
[$relation, $columnName] = explode('.', $column, 2);
return new SearchableRelation($relation, $columnName);
}
return new static($column);
}
/**
* Apply the search.
*
* @param \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Relations\Relation $query
* @param string $search
* @param string $connectionType
* @param string $whereOperator
* @return \Illuminate\Database\Eloquent\Builder
*/
public function __invoke($query, $search, string $connectionType, string $whereOperator = 'orWhere')
{
return $query->{$whereOperator}(
$this->columnName($query),
$connectionType == 'pgsql' ? 'ilike' : 'like',
"%{$search}%"
);
}
/**
* Get the column name.
*
* @param \Illuminate\Database\Eloquent\Builder|\Illuminate\Database\Eloquent\Relations\Relation $query
* @return string
*/
protected function columnName($query)
{
return $this->column instanceof Expression ? $this->column : $query->qualifyColumn($this->column);
}
}