Laravel从hasMany Relation中得到一行


Laravel get a single row from hasMany Relation

我有以下数据库结构:

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;
}