我在Laravel应用程序中设置了以下数据库模式。为了简单起见,我只提到重要的专栏。
任务
工作啊
使用者
在任务模型中,我希望有一个与用户表的关系方法,在本例中,它被称为中间作业
表上的客户机(
Client\u id
)。
在我的代码中,我希望能够引用$task-
我查阅了这些文件,发现:
public function client()
{
return $this->belongsToMany('App\User', 'users', 'client_id');
}
返回:
"SQLSTATE[42S22]:找不到列: 1054字段列表中的未知列'jobs.user_id'(SQL:选择用户
.*,作业
.client_id
aspivot_client_id
,user_id
作为pivot_user_id
从用户
内连接作业
在用户
。id
=作业
。user_id
其中作业
。client_id
=112和用户
。deleted_at
为空)"
或
public function client()
{
return $this->hasOneThrough('App\User', 'App\Job', 'client_id', 'user_id');
}
返回:
"SQLSTATE[42S22]:找不到列:1054未知列'users.user_id'in'on子句'(SQL:选择用户
.*,作业
.client_id
aslaravel_through_key
from>用户
内连接作业
。id=用户
。user_id
其中作业
。deleted_at
为空,作业
。client_id
code>=111和用户
。deleted_at
为空限制1)"
如何从任务
模型中检索用户
模型?
你能试一下吗
public function client()
{
return $this->hasOneThrough('App\User', 'App\Job', 'id', 'id', 'id', 'client_id');
}
对于任何仍在寻找有效答案的人来说:
在你的任务模型类中:
public function client()
{
return $this->hasOneThrough(
User::class, // 'App\User' or 'App\Models\User' in Laravel 8
Job::class, // 'App\Job' or 'App\Models\Job' in Laravel 8
'id', // Foreign key on the jobs table... <--,
'id', // Foreign key on the users table... | <--,
'job_id', // Local key on the tasks table... ---' |
'client_id' // Local key on the jobs table... ---'
);
}
箭头显示用于链接到另一列的列。
正确的引用总是让我感到困惑,所以希望这能有所帮助。:)
有关参考信息,请参见具有一到键约定
实际上:
当您运行任务::(['客户端'])-
select * from `tasks`
它从这些结果行中提取所有唯一的作业id
以用于第二个SQL的绑定(?
):
select
`users`.*,
`jobs`.`id` as `laravel_through_key`
from `users`
inner join `jobs`
on `jobs`.`client_id` = `users`.`id`
where `jobs`.`id` in (?, ? ...etc)
使用Laravel 8.47进行测试。0使用MySQL。