Laravel 拉雷维尔。嵌套关系。来自外部查询的条件

Laravel 拉雷维尔。嵌套关系。来自外部查询的条件,laravel,laravel-5,Laravel,Laravel 5,我发现db表之间的关系是这样的: 用户-主目标-子目标-预算 用户有一个主要目标 MainGoal有许多子目标 子目标有很多预算 预算表具有列用户id 所以我的查询生成器看起来像这样: User::with('Maingoal.Subgoals.Budgets'); 最终,我得到了每个子目标的预算。但是,我想获得精确用户的预算,特别是第一个查询结果中的用户预算(User::with…)。 可能吗?你觉得怎么样 谢谢你的回答 为了让您在急切加载时提供条件,您可以这样做 User::with(['

我发现db表之间的关系是这样的: 用户-主目标-子目标-预算

用户有一个主要目标

MainGoal有许多子目标

子目标有很多预算

预算表具有列用户id

所以我的查询生成器看起来像这样:

User::with('Maingoal.Subgoals.Budgets');
最终,我得到了每个子目标的预算。但是,我想获得精确用户的预算,特别是第一个查询结果中的用户预算(User::with…)。 可能吗?你觉得怎么样


谢谢你的回答

为了让您在急切加载时提供条件,您可以这样做

User::with(['Maingoal.Subgoals.Budgets' => function($q) use ($id) {
    return $q->where('user_id', $id);
}])->get();

其中$id是该特定用户的id

用户有一个主目标,即有多个子目标有一个预算?@TomaszRup,不,每个子目标有多个预算。编辑)如果您的
Budgets
表中有
user\u id
,您不能定义用户
hasMany('App\Budgets')
?然后只要调用
$user->budgets()
?@TomaszRup,当然可以。但预算表也有sub_goal_id列。所以,在这种情况下,我不需要用户预算关系,我需要另一个。我不知道用户的id。当User::with(…)->get()完成时,我将获得它。但是我想在闭包中检索它,我不知道如何使用渴望加载轻松地实现这一点,因为在使用where子句之前,首先需要一个条件。我认为你现在唯一能做的就是提取id并进行for循环