>我正在尝试在我的自定义脚本中访问用户的first_name
,该脚本使用 Eloquent 检索数据(实际上在 Laravel 5 中)
所以
这是我如何定义关系(一对多)//这是正确的吗?Wp Guru可能会告诉
在User
模型中,我有
public function usermeta() {
return $this->hasMany('AppUsermeta','user_id');
}
在我的UserController
里,我有
$users = AppUser::with('usermeta')->get();
这是我如何在我的观点中访问它
@foreach ($users as $user)
<tr>
<th>{{$user->ID}}</th>
<th>{{$user->usermeta->/*how to access particular meta key here*/}}</th>
<th>{{$user->display_name}}</th>
</tr>
@endforeach
所以问题是,除了当我尝试访问usermeta
关系之外,一切都有效,我实际上不确定如何通过在我的关系或 foreach 循环中将meta_key
作为参数传递来查询特定元键的值
我尝试像$user->usermeta->first_name
一样直接访问,但这肯定是不正确的。
如何使用雄辩模型从wordpress数据库中的usermata
表中检索meta_value
?
编辑 1
通过@james飞行尝试访问器方法方法https://stackoverflow.com/a/30871346/1679510当我知道记录在集合对象中的位置时,它起作用。
if ($usermeta->count() > 0) {
return $usermeta[0]->meta_value;
}
但是,由于meta_key
可以是任何东西,并且可以驻留在其他位置。如果meta_key
是 first_name
,则$usermeta[1]
具有它的列值数组,依此类推。
if ($usermeta->count() > 0) {
return $usermeta[/*This cannot be hard code */]->meta_value;
}
如何解决它
Usermeta 是一个 hasMany 关系,这意味着 Eloquent 将返回一个包含多个 Usermeta 模型的 Collection 对象。
您可以改为这样做:
{{ $user->usermeta[0]->first_name }}
或者这个:
@foreach($user->usermeta as $usermeta)
{{ $usermeta->first_name }}
@endforeach
编辑
要将meta_key
和meta_value
用作键值对,您可以在User
上编写一个访问器方法:
public function getMetaValue($key) {
$usermeta = $this->usermeta->filter(function ($usermeta) use ($key) {
return $usermeta->meta_key === $key;
});
if ($usermeta->count() > 0) {
return $usermeta[0]->meta_value;
}
}
然后在刀片中访问,如下所示:
{{ $user->getMetaValue('first_name') }}
不过,在高音量下这会变慢。
编辑 2
上面的方法实际上应该如下,以确保数组键存在:
public function getMetaValue($key) {
$usermeta = $this->usermeta->filter(function ($usermeta) use ($key) {
return $usermeta->meta_key === $key;
});
if ($usermeta->count() > 0) {
return $usermeta->first()->meta_value;
}
}