HasManyThroug 关系返回 SQL 错误
HasManyThroug relations is returning SQL error
我正在开发内部 PMS,其中有四个模型:User
、Company
、Client
和 Project
。
一个Company
会有多个Users
,通过Company
,User
就会有很多Clients
和Projects
.这里没什么特别的,只是一个包含公司、客户、用户和项目的经典 PMS。
User
模型有一个company_id
字段(一个用户目前只能关联一个公司)。 Client
模型也有一个 company_id
字段。有了这个,我想我可以为 User
和 Client
建立 HasManyThrough
关系,我试过这个:
public function clients()
{
return $this->hasManyThrough( Client::class, Company::class );
}
然而,这 returns
SQLSTATE[HY000]: General error: 1 no such column: companies.user_id (SQL:
select "clients".*, "companies"."user_id" as "laravel_through_key"
from "clients"
inner join "companies"
on "companies"."id" = "clients"."company_id"
where "companies"."user_id" = 1
and "clients"."deleted_at" is null
在我的数据库中,companies.user_id
不存在,因为这个关系是由 users.company.id
定义的。写一个原始的 SQL 查询会更好吗?
或者可以只使用两个关系,例如:
// User Model
[.....]
public function company()
{
return $this->belongsTo( Company::class, [YOUR_FK_HERE] );
}
public function clients()
{
return $this->company->clients();
}
[....]
在公司模型中
// Company Model
[....]
public function clients()
{
return $this->hasMany( Client::class, [YOUR_FK_HERE] );
}
[....]
我正在开发内部 PMS,其中有四个模型:User
、Company
、Client
和 Project
。
一个Company
会有多个Users
,通过Company
,User
就会有很多Clients
和Projects
.这里没什么特别的,只是一个包含公司、客户、用户和项目的经典 PMS。
User
模型有一个company_id
字段(一个用户目前只能关联一个公司)。 Client
模型也有一个 company_id
字段。有了这个,我想我可以为 User
和 Client
建立 HasManyThrough
关系,我试过这个:
public function clients()
{
return $this->hasManyThrough( Client::class, Company::class );
}
然而,这 returns
SQLSTATE[HY000]: General error: 1 no such column: companies.user_id (SQL:
select "clients".*, "companies"."user_id" as "laravel_through_key" from "clients" inner join "companies" on "companies"."id" = "clients"."company_id" where "companies"."user_id" = 1 and "clients"."deleted_at" is null
在我的数据库中,companies.user_id
不存在,因为这个关系是由 users.company.id
定义的。写一个原始的 SQL 查询会更好吗?
或者可以只使用两个关系,例如:
// User Model
[.....]
public function company()
{
return $this->belongsTo( Company::class, [YOUR_FK_HERE] );
}
public function clients()
{
return $this->company->clients();
}
[....]
在公司模型中
// Company Model
[....]
public function clients()
{
return $this->hasMany( Client::class, [YOUR_FK_HERE] );
}
[....]