2015-09-11 3 views
0

У меня есть следующая структура базы данных:Laravel получить одну строку из hasMany Relation

users 
________ 
id 

user_fields 
________ 
id 
name 

user_field_values 
________ 
id 
user_id 
field_id 
value 

У меня есть основной hasMany Relation на UserFieldValues, но это выглядит ужасно для меня, особенно потому, что я не хочу, чтобы итерируем целое Отношение только для получения определенного user_field_values.value для определенного user_fields.name.

Итак, что я хочу получить, это user_fields_values.value от текущего пользователя, где user_fields.name =?

Моя идея состоит в том, чтобы сделать toToMany Relation, но я не получаю его на работу.

Я действительно оценил бы вашу помощь.

Решения

Благодаря Lê Чан Тиен Чунг, «нагрузка» была ключевым словом я искал.

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

ответ

3

Самый простой способ использует belongsToMany, withPivot получить значение, добавить где положение, чтобы правильно выбрать соотношение. Вот пример, не проверенный.

// 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; 
} 
Смежные вопросы