2016-09-06 7 views
0

У меня есть проект с основной таблицей «Qsos» и связкой отношений. Теперь, когда я пытаюсь создать расширенный поиск, я не знаю, как запросить все отношения в одно и то же время. Модель Q так следующее:Laravel 4 Запрос на отношения с жильем

public function band() 
{ 
    return $this->belongsTo('Band'); 
} 

public function mode() 
{ 
    return $this->belongsTo('Mode'); 
} 

public function prefixes() 
{ 
    return $this->belongsToMany('Prefix'); 
} 

public function user() 
{ 
    return $this->belongsTo('User'); 
} 

public function customization() { 
    return $this->hasOne('Customization'); 
} 

Тогда я SearchController с следующим кодом, который должен вернуть коллекцию всех радиосвязей следующих необходимых условий:

$qsos = Qso::withUser($currentUser->id) 
        ->join('prefix_qso','qsos.id','=','prefix_qso.qso_id') 
        ->join('prefixes','prefixes.id','=','prefix_qso.prefix_id') 
        ->where('prefixes.territory','like',$qTerritory) 
        ->withBand($qBand) 
        ->withMode($qMode) 
        ->where('call','like','%'.$input['qCall'].'%') 
        ->orderBy('qsos.id','DESC') 
        ->paginate('20'); 

И тогда в силе нужно вызвать $ qso-> prefixes-> first() и $ qso-> prefixes-> last() (Qso и Prefix имеют отношение manyToMany), но оба возвращают null. Что не так?

ответ

0

Вот красноречивый код, который я нашел, работает, но с очень много времени, чтобы процесс:

  $qsos = Qso::withUser($currentUser->id) 
        ->with('prefixes') 
        ->withBand($qBand) 
        ->withMode($qMode) 
        ->where('call','like','%'.$input['qCall'].'%') 
        ->whereHas('prefixes', function($q) use ($qTerritory) { 
         $q->where('territory','like',$qTerritory); 
        }) 
        ->orderBy('qsos.id','DESC') 
        ->paginate('20'); 
+0

Если я забрать с собой («префиксов») скорость становится приемлемым – brack11

Смежные вопросы