2017-02-09 4 views
0

В Laravel У меня есть модель, которая выглядит следующим образом:Laravel Eloquent жадная загрузка спутанность

class Recipient extends Model 
{ 
    public $table = 'recipients'; 

    public function location() 
    { 
     return $this->belongsTo('App\Location'); 
    } 

    public function teams() 
    { 
     return $this->belongsToMany('App\Team'); 
    } 


    public function company() 
    { 
     return $this->belongsTo('App\Company'); 
    } 

} 

Чтобы запросить эту модель я делаю это:

$recipients = Recipient::with('location') 
          ->with('teams') 
          ->where('company_id',Auth::user()->company_id) 
          ->where('teams.id', 10) 
          ->get(); 

На этом, я получаю сообщение об ошибке говорящее что laravel не может найти teams.id, поскольку он запрашивает только родительскую таблицу получателей. Удивляясь, что я делаю неправильно, я думал, что метод with должен стремиться к загрузке/записи внутреннего соединения? Нужно ли мне использовать DB: внутреннее соединение? Или я чего-то не хватает?

ответ

1

Используйте метод whereHas для этого:

Recipient::with('location') 
    ->where('company_id', auth()->user()->company_id) 
    ->whereHas('teams', function($q){ 
     return $q->where('id', 10); 
    }) 
    ->get(); 
0

попытаться быть явной и добавить оператор выбора. Иногда отношения не отображаются, если они не выбраны. Включить идентификаторы, иначе он не будет работать