Если таблица имеет отношение, загрузите ее несколько отношений - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть таблица p3. Который является потомком p2, а p2 является потомком p1. если у p3 есть другой дочерний элемент p4a, то загружаются p4a и p4b. Где p4a и p4b являются дочерними элементами p3.

->has('p1.p2.p3.p4a')->with(['p1.p2.p3.p4a','p1.p2.p3.p4b']);
also tried 
->whereHas('p1.p2.p3.p4a', function($q){
$q->with(['p1.p2.p3.p4a','p1.p2.p3.p4b']);
}

Author::->has('p1.p2.p3.p4a')->with(['p1.p2.p3.p4a','p1.p2.p3.p4b'])->where('id',1)->first();

Ожидаемый результат - получить все записи p4a и p4b, если p4a имеет хотя бы одну запись.

Фактический результат Получите p4a & p4b, даже если нет связанных записей

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

Ответ Дилипа верен, также есть способ определить количество существующих для загрузки

. Ниже приведен пример из документации laravel. внутри функции вы можете иметь все условия. Будет ли это работать для вас?

// Retrieve posts with at least ten comments containing words like foo%...
$posts = App\Post::whereHas('comments', function (Builder $query) {
    $query->where('content', 'like', 'foo%');
}, '>=', 10)->get();
0 голосов
/ 06 ноября 2019

Для такой ситуации вы можете использовать Стремительная загрузка .

$author = Author::with('p1.p2.p3.p4a')->where('id',1)->first();
if(!empty($author) && isset($author->p1->p2->p3->p4a) && $author->p1->p2->p3->p4a->count() > 0){
        $author->load('p1.p2.p3.p4b');
}
dd($author);
...