我有3张桌子,如下图:
https://i.imgur.com/zL7ouGu.png
我创建了用户与组织之间的关系表
我想使用每个用户的组织列表来检索一个集合。
目前,我正在收集一个用户多次返回的收藏集。
Collection {#226 ▼
#items: array:4 [▼
0 => {#232 ▼
+"name": "GotExx"
+"avatar_path": "gotexx.jpg"
+"orga-name": "My orga 1"
+"slug": "my-orga-1"
+"orga-avatar": "myorga1_logo.png"
}
1 => {#228 ▼
+"name": "GotExx"
+"avatar_path": "gotexx.jpg"
+"orga-name": "My orga 2"
+"slug": "my-orga-2"
+"orga-avatar": "myorga2_logo.png"
}
2 => {#234 ▼
+"name": "GotExx"
+"avatar_path": "gotexx.jpg"
+"orga-name": "My orga 3"
+"slug": "my-orga-3"
+"orga-avatar": "myorga3_logo.png"
}
3 => {#233 ▼
+"name": "root"
+"avatar_path": null
+"orga-name": "My orga 2"
+"slug": "my-orga-2"
+"orga-avatar": "myorga2_logo.png"
}
]
}
select users.name, users.avatar_path, organizations.name, organizations.slug, organizations.avatar_path
from relation_organization
right join users on relation_organization.user_id = users.id
left join organizations on relation_organization.organization_id = organizations.id
理想情况下,我想得到这个:
Collection {#226 ▼
#items: array:2 [▼
0 => {#232 ▼
+"name": "GotExx"
+"avatar_path": "gotexx.jpg"
+"organizations" => {
0 => {
+"orga-name": "My orga 1"
+"slug": "my-orga-1"
+"orga-avatar": "myorga1_logo.png"
}
1 => {
+"orga-name": "My orga 2"
+"slug": "my-orga-2"
+"orga-avatar": "myorga2_logo.png"
}
2 => {
+"orga-name": "My orga 3"
+"slug": "my-orga-3"
+"orga-avatar": "myorga3_logo.png"
}
}
}
1 => {#232 ▼
+"name": "root"
+"avatar_path": "null"
+"organizations" => {
0 => {
+"orga-name": "My orga 2"
+"slug": "my-orga-2"
+"orga-avatar": "myorga2_logo.png"
}
}
}
]
}
答案 0 :(得分:0)
这是Laravel真正与人交往的地方。在一次查询中,以set file separator tab
stats 'data.dat' matrix rowheaders columnheaders
的急切负载拉动users
。例如
organizations
根据您的问题,您的$users = User::with('organizations')->get().
现在将拥有系统中的所有用户及其关联的组织,每位用户列出一次。
如果要限制在 SQL 中绘制的字段,可以使用select:
$users
这全部假设您已在用户模型上正确建立了$users = User::select('avatar_path', 'name')->with(['organizations' => function($query){
$query->select('name', 'slug', 'avatar_path );
}])->get().
关系。
答案 1 :(得分:0)
Laravel的首选方式。
创建模型和关系。
用户模型
public class User extends Model
{
public function organizations()
{
return $this->belongsToMany(Organization::class);
}
}
组织模式
public class Organization extends Model
{
public function users()
{
return $this->belongsToMany(User::class);
}
}
在获取时使用紧急加载。
控制器功能
$usersWithOrganizations = User::with('organizations')->get();