首页 > 解决方案 > Laravel 8:在 ORM 中使用子查询的正确方法是什么?

问题描述

我有两个表用于这个查询。

第一个是forecasts包含用户对几个游戏的预测,最重要的字段是user_idgame_iduserscore

然后是games包含game_id,weekrealscore

我过于简单化了,但这就是想法。在games我有将在给定一周进行的所有游戏。

现在,我想获得用户在某一周预测的所有游戏,我已经解决了这个问题,DB::但我认为只使用 ORM 应该是更好的方法,所以这是我尝试的:

$fore = Forecast::where('user_id', $user->id)
    ->addSelect(['game_id' => Game::select('id')
        ->where('week', $week)
        ->whereColumn('game_id', 'games.id')
    ])
    ->get();

现在我的问题是这个解决方案基本上是忽略->where('week', $week),如果我离开或走这条线,它会给我11条记录(我预测第1周有6场比赛,预测第2周有5场比赛,一切都是测试数据)。

我尝试使用select()而不是addSelect()并没有发现任何区别。

那么,我做错了什么?我必须使用子查询和whereIn()?

标签: phplaraveleloquent

解决方案


推荐阅读