2014-09-23 2 views
0

У меня есть следующие соотношения:Eloquent вложенности с пунктом в среднем отношении

  • пользователя [многие-ко-многим с] присвоений
  • Подборки [многие-ко-многим с] Жетоны
  • assignment_user сводной таблицы имеет флаг «is_finished», который мне нужно, чтобы быть правдой

это мои отношения в моделях соответствия:

User.php

public function assignments() 
{ 
return $this->belongsToMany('Assignment')->withPivot('is_finished')->withTimestamps(); 
} 

Assignment.php

public function badges() 
{ 
return $this->belongsToMany('Badge', 'badge_assignment')->withTimestamps(); 
} 

Badge.php

public function assignments() 
{ 
return $this->belongsToMany('Assignment', 'badge_assignment')->withTimestamps(); 
} 

Я пытаюсь получить все значки для готовых присвоений моего Пользователя. Это был мой запрос:

$user = User::with(array(
'assignments' => function($query) { 
$query->where('is_finished', '=', true)->orderBy('updated_at', 'desc'); 
}) 
) 
->with('badges') 
->username($name)->first(); 

Однако это делает ошибку "Вызов на неопределенный метод Осветите \ Database \ Query \ Builder :: значки()", когда я использую Еогеасп ($ user-> assignments-> значки. ..).

Затем я попытался получить значки в области видимости сначала с, но я не знаю, как достичь is_finished:

$user = User::with(array(
'assignments.badges' => function($query) { 
$query->where('is_finished', '=', true)->orderBy('updated_at', 'desc'); 
}) 
) 
->username($name)->first(); 

С этим я получаю «столбец не найден», так как запрос поиск is_finished внутри значков, а не отношений assign_user.

Как я с этим вопросом, я попытался это просто, чтобы быть уверенным:

User::with('assignments.badges')->whereUsername($username); 

... и я все еще получаю «Undefined свойство: Осветить \ Database \ Eloquent \ Коллекция :: $ значки» ,

Что я делаю неправильно?

ответ

0

вам необходимо загрузить вложенные assignments.badges так:

$user = User::with(array(
    'assignments' => function($query) { 
     $query->where('is_finished', '=', true)->orderBy('updated_at', 'desc'); 
    }) 
) 
    ->with('assignments.badges') 
    ->username($name) // do you have a scope for this or should it be whereUsername? 
    ->first(); 
+0

используя код делает ту же ошибку, как мой третий (простой) попытка: «Не определено свойство: загоритесь \ Database \ Eloquent \ Коллекция :: $ значки» , FYI, я использую значки $ user-> assignments-> в моем представлении после получения результатов запроса. – Anonymous

+0

Я не думаю, что это так. Вероятно, вы пытаетесь вызвать что-то вроде этого: '$ user-> assignments-> badges', и, очевидно, это вызовет эту ошибку. Для самой загруженной загрузки мой код - это путь, поверьте мне. Ну, да, вы не можете этого сделать, конечно, вы хотите получить отношение «model» к «коллекции» моделей - вам нужен цикл foreach, например. –

+0

Глупый я, конечно, ты прав. Я был глуп и пытался получить значки, не выполняя второй цикл для каждого задания. Большое спасибо за быстрое решение! – Anonymous