[英]Select from table 1 with foreign_key = x on table 2 where table 2 foreign key = Y on table 3
不确定标题是否有意义,但这里有一个更好的描述:我有一个轮班表,其中有一个轮班工人的 id 和一个轮班工人为之做某事的客户的 id,并且客户表有一个用户id 与用户表中的关联记录。
我想 select 所有班次都有一个客户 ID,其中客户记录上的关联用户 ID 是 X。
Shifts Table
shift_id
shiftworker_id
client_id
...
Clients Table
client_id
user_id
...
Users Table
user_id
...
所以,我想要所有记录(来自班次),其中班次的 client_id 属于特定用户。
用户有很多客户,客户有很多与之相关的班次。 我想我追求的是这样的加入:
select * from shifts join shifts.client_id on clients.id and where clients.user_id = X
我正在尝试在 Laravel 中执行此操作,例如:
DB::table('shifts')->join('clients', 'client_id', '=', ...)->join('users', 'client_id', '=', X);
尽管对 SQL 的任何帮助表示赞赏,但我可以从那里找出 Laravel 查询。
谢谢
最简单的方法是创建“具有多个直通关系”并使用“用户 ID”查询用户 model,而不是查询班次。
class User extends Model
{
public function shifts()
{
return $this->hasManyThrough(Shift::class, Client::class);
}
}
class ShiftController extends Controller
{
public function index()
{
return User::where('id', 1)->with('shifts')->first()->shifts;
}
}
如果有效,controller 代码将返回班次表中的记录,不带任何关系数据或额外字段。 如果您需要添加一些额外的字段,此方法可能不是最好的方法。 在这种情况下,请提供有关所需 output 数据的更多详细信息。
评论后更新
您不需要使用任何 eloquent 关系 function 来获取每个客户的班次数据,因为 client_id 已经在班次表上。 所有你需要的是:
Shift::where('client_id', $client_id)->get();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.