2017-02-10 115 views
0

我利用Laravel的Lazy/Eager Loading的雄辩,并遇到了一个有趣的问题。Laravel雄辩5.3渴望/懒惰加载多个限制的相关模型

说明:

  • 的帐户有很多组,每组有一个优先级编号
  • 所有组包含的项目在他们

问题:

  • 我需要限制手动设置为每组返回的项目数

  • 这里的区别是,根据各组的优先级

所以限制数量的变化,例如,雄辩的“选择”语句将获得所有三个组,但将组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']); 
    
  • 组模式

    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种选择:

  • 让能言善辩的渴望负荷一切,根据自己的需要在PHP中筛选结果。
  • 通过仅提取主模型,然后单独查询每个模型与其各自的限制之间的关系,执行加载自我的过程。
  • 在您的组表中添加一个标志列,以便标记应为每个组返回的行。
+0

可能还有第4种选择,我会在这里做一个拉动请求,以增加这种功能......但是开发它需要比我现在需要更多的时间。你说什么是有道理的。 谢谢你的回应! 干杯队友! –