深层嵌套的关系过滤

时间:2015-07-25 15:44:38

标签: php laravel laravel-4 eloquent relationships

最近我遇到了访问和过滤深层嵌套关系的问题,所以我决定寻求帮助。

所以,我有这个数据库结构: http://s21.postimg.org/motrjy3dj/Screenshot_from_2015_07_24_12_14_51.png

我需要让一个项目中的所有团队,然后我需要为每个团队分配用户(该团队)。

到目前为止,当我尝试为每个用户提供优惠时,我的问题就开始了。用户只能为指定的团队提供一份报价,这会让我遇到问题。

这是我的代码:

$project = Project::with("variants")
                ->with(array(
                        "teams" => function($query) {

                            $query->with(array(

                                "users" => function($query) {

                                    $query->with("offers");
                                }
                            ));

                        }
                    ))
                ->find($projectID);

我在“用户”模型中有一个hasManyThrough关系“offer”,它返回给我所有的用户优惠,但实际上我只需要(一个)提供相关的team_user表。

我尝试使用范围过滤优惠,但这是一个糟糕的解决方案,因为对于每个用户,我都有对db的额外查询..

有没有办法动态过滤这些优惠?

谢谢!

1 个答案:

答案 0 :(得分:1)

我强烈建议您使用联接进行此类复杂查询:

$projectOffers = Project
     ->join('team', 'team.project_id', '=', 'project.id')
     ->join('team_user', 'team_user.team_id', '=', 'team.id')
     ->join('user', 'user.id', '=', 'team_user.user_id')
     ->join('offer', 'offer.id', '=', 'team_user.offer_id')
     ->get([
         'project.id',
         'team.id AS team_id',
         'user.id AS user_id',
         'offer.id AS offer_id',
         // any other columns you want
     ]);