亲爱的人们。
最近,我开始更多地使用Laravel模型和雄辩的关系,而不是编写Raw查询。
现在我遇到了一个问题:
我在用户模型:
中建立了关系public function roles()
{
return $this->belongsToMany('App\Role', 'users_has_roles', 'Users_id', 'Roles_role_id');
}
角色模型中的另一种关系:
public function users()
{
return $this->belongsToMany('App\User', 'users_has_roles', 'Roles_role_id', 'Users_id');
}
我能够检索所有用户并使用控制器中的代码回显它们:
$users = User::with('roles')->get();
foreach ($users as $user) {
echo $user."<br>";
}
{&#34; ID&#34;:18,&#34;名称&#34;:&#34; Ajx6bK&#34;&#34;姓&#34;:&#34; AwkMTWzgIB&#34; &#34;用户名&#34;:&#34; vt_2528&#34;&#34; created_at&#34;:&#34; 2017年1月12日&#34;&#34;的updated_at&#34 ;:空,&#34;作用&#34;:[{&#34; ROLE_ID&#34;:3,&#34; ROLE_NAME&#34;:&#34;记者&#34;&#34; role_description&#34; :&#34;能够在系统中管理报告。&#34;,&#34; pivot&#34;:{&#34; Users_id&#34;:18,&#34; Roles_role_id&#34;:3} }]} {&#34; ID&#34;:19,&#34;名称&#34;:&#34; NJYMCU&#34;&#34;姓&#34;:&#34; ZGzjvpDAiP&#34;&# 34;用户名&#34;:&#34; vt_6443&#34;&#34; created_at&#34;:&#34; 2017年1月12日&#34;&#34;的updated_at&#34;:空,& #34;作用&#34;:[{&#34; ROLE_ID&#34;:1,&#34; ROLE_NAME&#34;:&#34;联系&#34;&#34; role_description&#34;:&# 34;拥有系统中的大部分用户权限,包括用户管理。&#34;,&#34; pivot&#34;:{&#34; Users_id&#34;:19,&#34; Roles_role_id&#34;: 1}}]} {&#34; ID&#34;:20,&#34;名称&#34;:&#34; hVUrMG&#34;&#34;姓&#34;:&#34; fc72G7Ksw2&#34;&# 34;用户名&#34;:&#34; vt_6610&#34;&#34; created_at&#34;:&#34; 2017年1月12日&#34;&#34;的updated_at&#34;:空,& #34;作用&#34;:[{&#34; ROLE_ID&#34;:2&#34; ROLE_NAME&#34;:&#34;数据输入&#34;&#34; role_description&#34 ;: &#34;能够管理系统中的记录。&#34;,&#34; pivot&#34;:{&#34; Users_id&#34;:20,&#34; Roles_role_id&#34;:2}} ]}
问题: 我无法访问表格#34;角色&#34;的任何字段变量。 $ user-&gt; roles-&gt; role_name或role_description。
答案 0 :(得分:1)
$user->roles
是一系列角色,因此您应该相应地访问它们:
foreach ($user->roles as $role) {
echo $role->role_name;
}
答案 1 :(得分:0)
roles
是对象数组,你需要循环它
foreach($user->roles as $role){
echo $role->role_name."<br/>";
}
还要了解如何设置和获取属性值:http://php.net/manual/en/sdo.sample.getset.php
答案 2 :(得分:0)
您正在对集合进行回声,因此它会将其转换为JSON 但是,如果将集合转换为数组并使用任何转储方法(dd或dump),您将看到现在可以轻松遍历该数组以访问角色。
$users = User::with('roles')->get(); dd($users->toArray());
这将输出此
array:4 [▼
0 => array:8 [▶]
1 => array:8 [▶]
2 => array:8 [▶]
3 => array:8 [▼
"id" => 4
"username" => "testcase1"
"email" => "test1@test.com"
"firstname" => "Test"
"lastname" => "One"
"created_at" => "2018-04-04 05:17:13"
"updated_at" => "2018-04-04 05:17:13"
"roles" => array:1 [▼
0 => array:5 [▼
"id" => 4
"name" => "user"
"created_at" => "2018-04-04 05:17:13"
"updated_at" => "2018-04-04 05:17:13"
"pivot" => array:2 [▼
"user_id" => 4
"role_id" => 4
]
]
]
]
]
要访问角色名称和描述,您可以为此类数据的每个循环加倍
$users = User::with('roles')->get();
foreach ($users->toArray() as $key => $value) {
foreach ($value['roles'] as $innerkey => $innervalue) {
echo $innervalue['role_id'];//for role id
echo $innervalue['role_name'];//for role name
echo $innervalue['role_description'];//for role description
}
}
exit;