Skip to content

Commit bc92a96

Browse files
josemariagomezJose María Gómez Martíntaylorotwell
authored
[8.x] Add nested relationships to whereRelation function (#39064)
* Add nested relationships to whereRelation function * Removed 2 spaces * formatting * Update QueriesRelationships.php Co-authored-by: Jose María Gómez Martín <[email protected]> Co-authored-by: Taylor Otwell <[email protected]>
1 parent f0acffe commit bc92a96

File tree

1 file changed

+34
-6
lines changed

1 file changed

+34
-6
lines changed

src/Illuminate/Database/Eloquent/Concerns/QueriesRelationships.php

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -362,9 +362,23 @@ public function orWhereDoesntHaveMorph($relation, $types, Closure $callback = nu
362362
*/
363363
public function whereRelation($relation, $column, $operator = null, $value = null)
364364
{
365-
return $this->whereHas($relation, function ($query) use ($column, $operator, $value) {
366-
$query->where($column, $operator, $value);
367-
});
365+
$relations = collect(explode('.', $relation));
366+
367+
return $this->when(
368+
$relations->count() == 1,
369+
function($query) use ($relations, $column, $operator, $value) {
370+
$query->whereHas($relations->first(), function ($query) use ($column, $operator, $value) {
371+
$query->where($column, $operator, $value);
372+
});
373+
},
374+
function($query) use ($relations, $column, $operator, $value) {
375+
$query->whereHas($relations->first(), function ($query) use ($relations, $column, $operator, $value) {
376+
$relations->shift();
377+
378+
$query->whereRelation($relations->implode('.'), $column, $operator, $value);
379+
});
380+
}
381+
);
368382
}
369383

370384
/**
@@ -378,9 +392,23 @@ public function whereRelation($relation, $column, $operator = null, $value = nul
378392
*/
379393
public function orWhereRelation($relation, $column, $operator = null, $value = null)
380394
{
381-
return $this->orWhereHas($relation, function ($query) use ($column, $operator, $value) {
382-
$query->where($column, $operator, $value);
383-
});
395+
$relations = collect(explode('.', $relation));
396+
397+
return $this->when(
398+
$relations->count() == 1,
399+
function($query) use ($relations, $column, $operator, $value) {
400+
$query->orWhereHas($relations->first(), function ($query) use ($column, $operator, $value) {
401+
$query->where($column, $operator, $value);
402+
});
403+
},
404+
function($query) use ($relations, $column, $operator, $value) {
405+
$query->orWhereHas($relations->first(), function ($query) use ($relations, $column, $operator, $value) {
406+
$relations->shift();
407+
408+
$query->orWhereRelation($relations->implode('.'), $column, $operator, $value);
409+
});
410+
}
411+
);
384412
}
385413

386414
/**

0 commit comments

Comments
 (0)