Laravel готов загрузить для себя отношения - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть модель, которая имеет отношение к себе, как это

public function children() {
        return $this->hasMany(AppointmentPart::class,'parent_id');
}

Я хочу загружать запросы для этой модели, потому что каждая строка может иметь дочерний с () методому меня не работает

$parts = AppointmentPart::whereParentId(0)->with('children')->get();

мой клинок:

<ul id="treeData">
                     @foreach($parts as $part)
                          <li id="{{ $part->id }}"
                                        @if(!empty($part->children)) class="folder" @endif>
                                        {{ $part->title }}
                                        @if(!empty($part->children))
                                            @include('appointment::admin.appointment.layout._part_child', array('parts' => $part->children))
                                        @endif
                      </li>
                  @endforeach
</ul>

содержимое _part_child:

<ul>
    @foreach($parts as $part)
        <li id="{{ $part->id }}" @if(!empty($part->children)) class="folder" @endif>
            {{ $part->title }}
            @include('appointment::admin.appointment.layout._part_child',['parts'=>$part->children])
        </li>
    @endforeach
</ul>

как я могу это сделать?

1 Ответ

0 голосов
/ 30 сентября 2019

Вы должны использовать функцию whereHas(). Ознакомьтесь с официальной документацией .

. Если вам требуется еще больше энергии, вы можете использовать методы whereHas и orWhereHas для установки условий "где" в ваших запросах has. Эти методы позволяют добавлять настраиваемые ограничения в ограничение отношений [...]

Так что в вашем случае вы должны изменить свой метод следующим образом:

$parts = AppointmentPart::with('children')->whereHas('children', function($query) use ($parent_id) {
    $query->where('parent_id', '=', $parent_id);
})->get();

вы можететакже создайте локальную область действия для создания оператора запроса многократного использования.

...