gpt4 book ai didi

php - 使用查询范围但具有不同的查询模型 - Laravel

转载 作者:行者123 更新时间:2023-11-29 20:42:56 25 4
gpt4 key购买 nike

用户可以注册多个锦标赛并且每个锦标赛对于每个用户都有一个分数记录。

Relationship Diagram

我将 user_id 保留在 Score 表中以保持记录的唯一性。

我有这个查询:

$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并且Score表中没有“t_date”,所以我需要以某种方式访问​​锦标赛表并对其进行查询。反之亦然,我不能使用 Tournament::with('scores'),因为锦标赛的表中没有“user_id”,所以我无法获取特定用户的信息。

最佳答案

你说你不能去

Tournament::with('scores') there is no user_id in Tournament's table so I cant get for a specific user.

实际上,您仍然可以使用 with 方法,并且可以使用闭包过滤项目:

Tournament::with(['scores' => function($query) use ($user_id) {
$query->where('user_id', $user_id);
});
<小时/>

你还说:

I need to somehow access tournaments table and query on it

您可以使用相同的代码来修改当前的查询链

$query = Score::with(['tournaments' => function($query) {
$query->with('t_date, /**/); // Do your stuff here.
])
->upcoming()
->where('user_id',$request->user()->id)
->get();

希望这能解决您的问题。

关于php - 使用查询范围但具有不同的查询模型 - Laravel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38542350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com