2017-01-15 3 views
0

У меня есть рабочая функция, однако я бы хотел ограничить количество обработок на каждого консультанта, которые возвращаются.Ограниченная функция загрузки Laravel

Рабочий пример:

Clinic::where('user_id', Auth::id()) 
      ->with('consultants.specialism', 'consultants.treatments') 
      ->first(); 

Предлагаемая (но не работает) пример:

Clinic::where('user_id', Auth::id()) 
      ->with('consultants.specialism') 
      ->with(['consultants.treatments' => function ($query) { 
       $query->take(3); 
      }]) 
      ->first(); 

К сожалению, take или limit функции, ограничивает его общего количества обработок возвращенного ,

Я хотел бы ограничить обработку каждого консультанта до максимум 3, а не всего.

Как я могу достичь этого, пожалуйста?

+0

'treatments' должен возвращать коллекцию процедур, верно? Тогда вы хотите получить только первые 3 ... Так в чем проблема? '-> take (3)' делает именно это. – Frondor

+0

http://stackoverflow.com/questions/33607088/laravel-5-eager-loading-with-limit – sumit

ответ

-1

Попробовать это

Clinic::where('user_id', Auth::id()) 
->with(['consultants' => function ($query) { 
    $query 
    ->with(['specialism','treatments']) 
    ->take(3); 
}]) ->first(); 

Я на моем телефоне. Поэтому извините мое форматирование кода.

+0

Запрос, возвращенный из приведенного выше (где используется предел), является 'select * от консультантов, где consultants.clinic_id в ('1') предел 3'. Таким образом, по существу, это ограничит только 3 консультанта, а не 3 метода лечения на одного консультанта – Ben

0

У вас есть два варианта, либо извлечь все соответствующие комментарии и усечение в PHP, используя что-то вроде Collection::map или заменить жадную загрузку с complex sub-query