我有以下数据库结构:
users
________
id
user_fields
________
id
name
user_field_values
________
id
user_id
field_id
value
我在UserFieldValues上有一个基本的hasMany关系,但这对我来说看起来很糟糕,特别是因为我不想迭代整个关系只是为了得到一个特定的user_field_values。user_fields.name.
所以我想得到的是一个user_fields_values。user_fields.name = ?
当前用户的值我的想法是做一个belongsToMany关系,但我没有得到它的工作。
我真的很感激你的帮助。 <<p> 解决方案/strong>感谢Lê Trần Tiến Trung,"load"是我正在寻找的关键字。
public function userFields() {
return $this->belongsToMany(''App'Models'UserFields',"user_field_values", 'user_id', 'field_id')->withPivot('value');
}
public function userField($fieldName) {
$this->load(['userFields' => function($q) use ($fieldName) {
$q->where('slug', '=', $fieldName);
}])->first();
}
最简单的方法是使用belongsToMany, withPivot来获取值,添加where子句来选择正确的关系。以下是未测试的示例。
// User.php
public function fields()
{
return $this->belongsToMany('Field', 'user_field_values')->withPivot('value');
}
// query
$users = User::all();
$users->load(['fields' => function($q) use ($fieldName) {
$q->where('name', '=', $fieldName);
});
foreach ($users as $user) {
echo $user->fields->first()->pivot->value;
}