Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从表1中选择,表2中的外键=x,其中表3中的表2外键=Y_Sql_Laravel - Fatal编程技术网

Sql 从表1中选择,表2中的外键=x,其中表3中的表2外键=Y

Sql 从表1中选择,表2中的外键=x,其中表3中的表2外键=Y,sql,laravel,Sql,Laravel,不确定标题是否有意义,但这里有一个更好的描述:我有一个轮班表,其中有一个轮班工人id和一个轮班工人为之做事情的客户id,而客户表有一个用户id和用户表中的相关记录 我想选择所有具有客户端id的班次,其中客户端记录上的关联用户id为X Shifts Table shift_id shiftworker_id client_id ... Clients Table client_id user_id ... Users Table user_id ... 因此,我需要所有记录(来自班次),其中

不确定标题是否有意义,但这里有一个更好的描述:我有一个轮班表,其中有一个轮班工人id和一个轮班工人为之做事情的客户id,而客户表有一个用户id和用户表中的相关记录

我想选择所有具有客户端id的班次,其中客户端记录上的关联用户id为X

Shifts Table
shift_id
shiftworker_id
client_id
...

Clients Table
client_id
user_id
...

Users Table
user_id
...
因此,我需要所有记录(来自班次),其中班次的客户机id属于特定用户

用户有许多客户机,客户机有许多与之相关的班次。我想我想要的是像这样的加入:

select * from shifts join shifts.client_id on clients.id and where clients.user_id = X
我试图在拉雷维尔做到这一点,比如:

DB::table('shifts')->join('clients', 'client_id', '=', ...)->join('users', 'client_id', '=', X);
尽管非常感谢您对SQL的任何帮助,我可以从中找到Laravel查询


谢谢

最简单的方法是创建一个用户模型,并使用“用户id”查询用户模型,而不是查询班次

class User extends Model
{
    public function shifts()
    {
        return $this->hasManyThrough(Shift::class, Client::class);
    }
}
如果工作正常,控制器代码将从移位表返回记录,而不返回任何关系数据或额外字段。如果需要添加一些额外字段,此方法可能不是最好的方法。在这种情况下,请提供有关所需输出数据的更多详细信息

评论后更新

您不需要使用任何雄辩的关系函数来获取每个客户机的班次数据,因为客户机id已经在班次表中。您所需要的只是:

Shift::where('client_id', $client_id)->get();

所以你不使用有关系的雄辩模型?是的,我使用雄辩模型和关系,但我对Laravel是新手,我在搜索时发现的第一件事是使用DB::table(“…”)进行连接,所以我认为这是一种方法,或者可以提供一些见解。我真的为模特和亲戚们感到高兴,它更优雅了!谢谢你这么说,它似乎工作得很好。您是否有任何关于获取相同数据但仅针对特定客户的建议?那么在那里的某个地方cliend_id=X?它会是这样的:公共函数shiftsForCLinet($id){return$this->hasManyThrough(Shift::class,Client::class)->where('Client_id','=',$id);}[刚刚尝试过,但没有结果]
Shift::where('client_id', $client_id)->get();