Laravel 5.3 hasManyThrough 通过中间 table
Laravel 5.3 hasManyThrough through an intermediate table
我有以下 table 关系:
organizations
id - integer
organization_users
organization_id - integer (FK)
user_id - integer (FK)
users
id - integer
我试图通过 eloquent 关系获取组织的所有用户。这是我的 Organization.php 模型及其关系:
class Organization extends Model
{
public function Users(){
return $this->hasManyThrough('App\User', 'App\OrganizationUser',
'organization_id', 'user_id', 'id');
...
}
我尝试了很多这种关系的组合,例如
return $this->hasManyThrough('App\User', 'App\OrganizationUser',
'user_id', 'organization_id', 'id');
但都出现了相同的错误(这个错误来自第一个查询):
Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not
found: 1054 Unknown column 'organization_users.id' in 'on clause' (SQL: select
`users`.*, `organization_users`.`organization_id` from `users` inner join
`organization_users` on `organization_users`.`id` = `users`.`user_id` where
`organization_users`.`organization_id` = 1)'
我是否可以让关系检索 user_id 来查询用户 table 而不是 Laravel 尝试检索 organization_users.id?如果没有,还有其他解决方法吗?
这是many to many关系。
用户模型:
public function organizations()
{
return $this->belongsToMany('App\Organization','organization_users');
}
组织模型:
public function users()
{
return $this->belongsToMany('App\User','organization_users');
}
要获取所有用户及其组织:
$users=User::with('organizations')->get();
foreach($users as $user)
{
print_r($user->name);
foreach($user->organizations as $organization)
{
print_r($organization->name);
}
}
你所描述的看起来可能是'Many-to-Many'关系。
https://laravel.com/docs/5.3/eloquent-relationships#many-to-many
我有以下 table 关系:
organizations
id - integer
organization_users
organization_id - integer (FK)
user_id - integer (FK)
users
id - integer
我试图通过 eloquent 关系获取组织的所有用户。这是我的 Organization.php 模型及其关系:
class Organization extends Model
{
public function Users(){
return $this->hasManyThrough('App\User', 'App\OrganizationUser',
'organization_id', 'user_id', 'id');
...
}
我尝试了很多这种关系的组合,例如
return $this->hasManyThrough('App\User', 'App\OrganizationUser',
'user_id', 'organization_id', 'id');
但都出现了相同的错误(这个错误来自第一个查询):
Illuminate\Database\QueryException with message 'SQLSTATE[42S22]: Column not
found: 1054 Unknown column 'organization_users.id' in 'on clause' (SQL: select
`users`.*, `organization_users`.`organization_id` from `users` inner join
`organization_users` on `organization_users`.`id` = `users`.`user_id` where
`organization_users`.`organization_id` = 1)'
我是否可以让关系检索 user_id 来查询用户 table 而不是 Laravel 尝试检索 organization_users.id?如果没有,还有其他解决方法吗?
这是many to many关系。
用户模型:
public function organizations()
{
return $this->belongsToMany('App\Organization','organization_users');
}
组织模型:
public function users()
{
return $this->belongsToMany('App\User','organization_users');
}
要获取所有用户及其组织:
$users=User::with('organizations')->get();
foreach($users as $user)
{
print_r($user->name);
foreach($user->organizations as $organization)
{
print_r($organization->name);
}
}
你所描述的看起来可能是'Many-to-Many'关系。
https://laravel.com/docs/5.3/eloquent-relationships#many-to-many