@@ -362,9 +362,23 @@ public function orWhereDoesntHaveMorph($relation, $types, Closure $callback = nu
362
362
*/
363
363
public function whereRelation ($ relation , $ column , $ operator = null , $ value = null )
364
364
{
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
+ );
368
382
}
369
383
370
384
/**
@@ -378,9 +392,23 @@ public function whereRelation($relation, $column, $operator = null, $value = nul
378
392
*/
379
393
public function orWhereRelation ($ relation , $ column , $ operator = null , $ value = null )
380
394
{
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
+ );
384
412
}
385
413
386
414
/**
0 commit comments