2017-02-10 16 views
0

Я использую красноречивый Laravel от Lazy/Eager Loading и столкнулся с интересной проблемой.Laravel eloquent 5.3 Eager/Lazy, связанные с загрузкой моделей с несколькими ограничениями

Описание:

  • Счет имеет множество групп, каждая из которых с номером приоритета
  • Все группы содержат элементов в них

Вопрос:

  • мне нужно вручную установить ограничение на количество возвращаемых элементов каждой группы

  • Разница здесь в том, что изменения номера предела, основанные на каждом уровне групп приоритета

Так, к примеру, eloquent «select» будет получать все три группы, но ограничивать количество элементов, возвращаемых в группе 1, всего на 3 элемента, группа 2 - всего на 8 элементов, от 3 до 17 элементов.

То, что я пытался сделать:

  • код в контроллере, чтобы получить записи

    return Account::with([ 
    'group_list.item' 
    ])->where('group_id', $my->group_id) 
    ->orderBy('group_priority_num', 'ASC') 
    ->take(3) <----Gets three groups 
    ->get(['group_priority_num','group_title','group_id']); 
    
  • Group Модель

    public function group_list() { 
    
    // Example 
    $this->number = [4 , 7, 15]; 
    
    
    return $this->group()->limit($this->number)->groupBy('user_group_id_fk'); 
    } 
    

Это возвращает только 1 запись или вообще ничего, поэтому я в настоящее время путаюсь, как правильно подойти к ней. Может ли кто-нибудь дать мне некоторое руководство по этому поводу?

Любая помощь с благодарностью, заблаговременно. Приветствия!

ответ

2

Желаемая загрузка осуществляется по второму запросу с использованием WHERE foreign_key_column IN (list of primary model IDs). При таком запросе невозможно установить лимит на основе каждой модели, если не существует другого условия, согласно которому результаты могут быть дополнительно отфильтрованы.

У вас есть 3 варианта:

  • Let красноречивый нетерпеливый нагрузки все и фильтровать результаты в PHP в соответствии с вашими потребностями.
  • Выполняйте надежную загрузку себя, выбирая только основную модель, за которой следуют отдельные запросы для отношений каждой модели с их соответствующими пределами.
  • Добавьте столбец флага в таблицу групп, который позволит вам пометить строки, которые должны быть возвращены для каждой группы.
+0

Может быть и четвертый вариант, где я бы сделал запрос на растяжение, который бы добавил к этому типу функциональности ... однако для его разработки потребуется больше времени, чем в настоящее время. То, что вы говорите, имеет смысл. Благодарим за отзыв! Приветствие! –