2015-04-08 5 views
0

мне нужна помощь для Laravel 4.2Laravel whereHas в отношениях "где не работает"

модели являются: // 1. Модель kelengkapan

class Kelengkapan extends Eloquent{ 

    public function detilKelengkapan(){ 
     return $this->hasMany('DetilKelengkapan', 'id_kelengkapan'); 
    }  
} 

// 2. Модель DetilKelengkapan

class DetilKelengkapan extends Eloquent{ 

    public function tDetilKelengkapanPaket(){ 
     return $this->hasMany('TDetilKelengkapanPaket', 'id_detil_kelengkapan'); 
    } 

    public function kelengkapan(){ 
     return $this->belongsTo('Kelengkapan', 'id_kelengkapan'); 
    } 


} 

// 3. Модель TDetilKelengkapanPaket

class TDetilKelengkapanPaket extends Eloquent{ 

     public function detilKelengkapan(){ 
      return $this->belongsTo('DetilKelengkapan', 'id_detil_kelengkapan'); 
     } 

    } 

контроллер:

$kelengkapan = Kelengkapan::with('detilKelengkapan.tDetilKelengkapanPaket') 
          ->whereHas('detilKelengkapan.tDetilKelengkapanPaket', function($q) use ($id){ 
           $q->where('id_paket', $paket); 
          })->get(); 

но результат есть не фильтруя "i d_paket ", но показал все данные. Благодарю. (новичок)

ответ

0

Там, где у вас есть функция $id переменная в закрытии, но вы используете $packet внутри.

$kelengkapan = Kelengkapan::with('detilKelengkapan.tDetilKelengkapanPaket') 
          ->whereHas('detilKelengkapan.tDetilKelengkapanPaket', function($q) use ($id){ 
           $q->where('id_paket', $id); 
           //---------------------^ 
          })->get(); 

Попробуйте и дайте мне знать результат.

1

Ваш код:

$kelengkapan = Kelengkapan::with('detilKelengkapan.tDetilKelengkapanPaket') 
         ->whereHas('detilKelengkapan.tDetilKelengkapanPaket', function($q) use ($id){ 
          $q->where('id_paket', $paket); 
         })->get(); 

Правильный код:

$kelengkapan = Kelengkapan::with('detilKelengkapan.tDetilKelengkapanPaket') 
         ->whereHas('detilKelengkapan.tDetilKelengkapanPaket', function($q) use ($id){ 
          //the function should return the $q variable. 
          return $q->where('id_paket', $id); 
         })->get(); 

Объяснение:

whereHas функция имеет 2 обязательные аргументы. Имя функции связи и закрытие. Закрытие должно быть return a query, чтобы фильтры могли быть прикованы.

http://laravel.com/docs/4.2/eloquent#querying-relations

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