update v1.0.4
This commit is contained in:
@@ -23,6 +23,7 @@ trait SearchableTrait
|
||||
* @param \Illuminate\Database\Eloquent\Builder $q
|
||||
* @param string $search
|
||||
* @param float|null $threshold
|
||||
* @param boolean $entireText
|
||||
* @return \Illuminate\Database\Eloquent\Builder
|
||||
*/
|
||||
public function scopeSearch(Builder $q, $search, $threshold = null, $entireText = false)
|
||||
@@ -110,6 +111,20 @@ trait SearchableTrait
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether or not to keep duplicates.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
protected function getGroupBy()
|
||||
{
|
||||
if (array_key_exists('groupBy', $this->searchable)) {
|
||||
return $this->searchable['groupBy'];
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the table columns.
|
||||
*
|
||||
@@ -154,26 +169,29 @@ trait SearchableTrait
|
||||
*/
|
||||
protected function makeGroupBy(Builder $query)
|
||||
{
|
||||
$driver = $this->getDatabaseDriver();
|
||||
if ($driver == 'sqlsrv') {
|
||||
$columns = $this->getTableColumns();
|
||||
if ($groupBy = $this->getGroupBy()) {
|
||||
$query->groupBy($groupBy);
|
||||
} else {
|
||||
$id = $this->getTable() . '.' .$this->primaryKey;
|
||||
$driver = $this->getDatabaseDriver();
|
||||
|
||||
if ($driver == 'sqlsrv') {
|
||||
$columns = $this->getTableColumns();
|
||||
} else {
|
||||
$columns = $this->getTable() . '.' .$this->primaryKey;
|
||||
}
|
||||
|
||||
$query->groupBy($columns);
|
||||
|
||||
$joins = array_keys(($this->getJoins()));
|
||||
|
||||
foreach ($this->getColumns() as $column => $relevance) {
|
||||
|
||||
array_map(function($join) use ($column, $query){
|
||||
|
||||
if(Str::contains($column, $join)){
|
||||
$query->groupBy("$column");
|
||||
array_map(function ($join) use ($column, $query) {
|
||||
if (Str::contains($column, $join)) {
|
||||
$query->groupBy($column);
|
||||
}
|
||||
|
||||
}, $joins);
|
||||
|
||||
}
|
||||
}
|
||||
$query->groupBy($id);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -184,7 +202,7 @@ trait SearchableTrait
|
||||
*/
|
||||
protected function addSelectsToQuery(Builder $query, array $selects)
|
||||
{
|
||||
$selects = new Expression(implode(' + ', $selects) . ' as relevance');
|
||||
$selects = new Expression('avg(' . implode(' + ', $selects) . ') as relevance');
|
||||
$query->addSelect($selects);
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user