Skip to content

Commit c2585e8

Browse files
committed
Fix multiple relation search
1 parent de329d7 commit c2585e8

File tree

1 file changed

+6
-29
lines changed

1 file changed

+6
-29
lines changed

src/SearchesRelations.php

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ public static function searchable()
2626
*/
2727
protected static function applySearch($query, $search)
2828
{
29-
return tap(parent::applySearch($query, $search), function ($query) use ($search) {
30-
static::applyRelationSearch($query, $search);
29+
return $query->where(function ($query) use ($search) {
30+
return static::applyRelationSearch(parent::applySearch($query, $search), $search);
3131
});
3232
}
3333

@@ -36,23 +36,17 @@ protected static function applySearch($query, $search)
3636
*
3737
* @param \Illuminate\Database\Eloquent\Builder $query
3838
* @param string $search
39-
* @return void
39+
* @return \Illuminate\Database\Eloquent\Builder
4040
*/
41-
public static function applyRelationSearch(Builder $query, string $search)
41+
public static function applyRelationSearch(Builder $query, string $search): Builder
4242
{
43-
foreach (static::searchableRelations() as $relation => $columns) {
43+
foreach ($searchableRelations = static::searchableRelations() as $relation => $columns) {
4444
$query->orWhereHas($relation, function ($query) use ($columns, $search) {
4545
$query->where(static::searchQueryApplier($columns, $search));
4646
});
4747
}
4848

49-
// All search conditionals have to be combined into 1 nested conditional.
50-
// We just applied a query to search for relationship columns while Nova
51-
// has also applied a separate query to search for model columns. That's
52-
// why we merge last 2 conditionals into 1 nested conditional which leaves
53-
// us with this nicely formatted query that also seatches in relationships.
54-
// SELECT ? FROM ? WHERE ($searchQuery OR $relationQuery)
55-
static::mergeLastWheres($query, 2);
49+
return $query;
5650
}
5751

5852
/**
@@ -80,21 +74,4 @@ public static function searchQueryApplier(array $columns, string $search): Closu
8074
}
8175
};
8276
}
83-
84-
/**
85-
* Merge last where conditionals into a 1 nested conditional.
86-
*
87-
* @param \Illuminate\Database\Eloquent\Builder $query
88-
* @param int $count
89-
* @return void
90-
*/
91-
public static function mergeLastWheres(Builder $query, int $count)
92-
{
93-
$query = $query->getQuery();
94-
$queries = array_splice($query->wheres, $count);
95-
96-
$query->where(function ($query) use ($queries) {
97-
$query->wheres = array_merge($query->wheres, $queries);
98-
});
99-
}
10077
}

0 commit comments

Comments
 (0)