2016-06-17 5 views
1

У меня есть проблемы с Laravel и многими из многих отношений.Laravel, запрашивая отношения «многие ко многим»

я иметь следующую структуру: Sensor -> группы датчиков -> использования

поэтому датчик может принадлежать многим группам, и группа может иметь несколько «использований».

Класс датчика выглядит следующим образом: класс

class sensor extends Model { 

protected $table = 'sensor'; 
protected $primaryKey = 's_id'; 

public function groups() 
    { 
    return $this->belongsToMany('App\sensorgroup','sensor_sensorgroup','ssg_s_id','ssg_sg_id'); 
    } 
} 

sensorgroup выглядит следующим образом:

class sensorgroup extends Model { 

    protected $table = 'sensorgroup'; 
    protected $primaryKey = 'sg_id'; 

    public function sensors() 
    { 
     return $this->belongsToMany('App\sensor', 'sensor_sensorgroup','ssg_sg_id','ssg_s_id'); 
    } 

    public function usages() 
    { 
     return $this->belongsToMany('App\sensorgroupUsage','sensorGroup_sensorGroupUsage','sgsgu_sg_id','sgsgu_sgu_id'); 
    } 
} 

и класс обыкновений выглядит следующим образом:

class sensorgroupUsage extends Model { 

    protected $table = 'SensorGroupUsage'; 
    protected $primaryKey = 'sgu_id'; 
    protected $fillable = ['sg_name']; 

    public function sensorgroups() 
    { 
     return $this->belongsToMany('App\sensorgroup','sensorGroup_sensorGroupUsage','sgsgu_sgu_id','sgsgu_sg_id'); 
    } 

} 

Теперь я хочу получить все группы для датчика, но только если эта группа датчиков привязана к определенному «использованию».

Чтобы получить все sensorgroups для одного датчика, я могу использовать это:

$sensor = App\sensor::find($sensorId); 
$groups = $sensor->groups(); 

Я не могу, однако выяснить, как добавить условие получить только группы датчиков, которые прикреплены к конкретному использованию. Есть идеи?

+0

Какая версия Laravel вы используете? – TheFallen

ответ

1

Использование whereHasmethod

$usergesId = //here must be an array with useges id 
$sensor = App\sensor::find($sensorId); 
$groups = $sensor->groups()->whereHas('usages', function ($query) use($usergesId) { 
    $query->whereIn('sgu_id', $usagesId); 
})->get(); 
+0

Спасибо! это действительно работает! Запрос, который он производит, не самый изящный, но поскольку таблицы, которые я использую, имеют только несколько строк данных, влияние производительности незначительно – ErikL

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