用户可以注册多个锦标赛和 每个锦标赛都有一个每个用户的分数记录。
我在分数表中保留了user_id以保持记录的唯一性。
我有这个查询:
$tournaments = DB::table('tournaments')
->join('scores','tournaments.id','=','scores.tournament_id')
->select('tournaments.*','scores.score','scores.tees')
->where('t_date','<',Carbon::today())
->where('scores.user_id',$request->user()->id)
->get();
我想避免连接,并使用查询范围重用where子句'(t_date < Carbon::today())'
所以,这是我提出的查询:
//This is in Tournament Model
public function scopeUpcoming($query)
{
return $query->where('t_date','>',Carbon::today());
}
$query = Score::with('tournaments')
->upcoming()
->where('user_id',$request->user()->id)
->get();
但是scopeUpcoming()使用$ query并且没有&#39; t_date&#39;在得分表中,所以我需要以某种方式访问锦标赛表并对其进行查询。反之亦然我不能使用Tournament ::(&#39;得分&#39;),因为没有&#39; user_id&#39;在锦标赛的桌子上,所以我无法获得特定的用户。
答案 0 :(得分:0)
你说你不能跟
一起去
Tournament::with('scores')
锦标赛表中没有user_id
所以我无法获得特定用户。
实际上,您仍然可以使用with
方法,并且可以使用闭包来过滤项目:
Tournament::with(['scores' => function($query) use ($user_id) {
$query->where('user_id', $user_id);
});
你也说过:
我需要以某种方式访问锦标赛表并对其进行查询
您可以使用相同的代码来修改当前的查询链
$query = Score::with(['tournaments' => function($query) {
$query->with('t_date, /**/); // Do your stuff here.
])
->upcoming()
->where('user_id',$request->user()->id)
->get();
希望这能照亮你的情况。