У меня есть 3 модели. Компания, Пользователь, Группа. Я пытаюсь вернуть все записи компании, чей создатель (пользователь) имеет (группу) того, что я указываю.красноречивый запрос несколько отношений глубокий
Company.php
public function user() {
return $this->belongsTo('User');
}
User.php
public function company()
{
return $this->hasMany('Company')->orderBy('created_at', 'desc');
}
public function group()
{
return $this->belongsToMany('Group')->withTimestamps();
}
public function hasGroup($check)
{
if(is_array($check)) {
$groups = array_fetch($this->group->toArray(), 'name_short');
return !!array_intersect($check, $groups) ? true : false;
} else {
return in_array($check, array_fetch($this->group->toArray(), 'name_short'));
}
}
Group.php
public function user(){
return $this->belongsToMany('User');
}
Я знаю, как сделать запрос непосредственно связанных моделей. Не знаете, с чего начать на моделях, связанных с непосредственно связанными моделями.
Ниже приведена концепция, а не работоспособный код. Как бы я думал, это сработает.
$companies = Company::where('active','=','1')where($this->user->hasGroup(array('admin','moderator','subscriber')));
Этот вид получает меня, что я ищу.
$c = Company::with('user.group')->where('active','=',1)->get();
Это своего рода показывает, что мне нужно, просто не знаю, как показать только записи с определенным компании-> user-> собственности группы. Вот выход из этого в формате JSON для удобства чтения - http://pastebin.com/wFTi9ye0
Пробовал это, не работает:
$names = array('subscriber','user');
$c = Company::with(array('user.group' => function($query) use($names)
{
$query->whereIn('name_short', $names)
}))->get();
.edit. Просто попытался это:
$c = Company::whereHas('user', function($q)
{
$q->whereHas('group', function($q)
{
$q->where('name_short', '=', 'user');
});
});
#print_r($c->toJSON());
print_r($c);
браузер разбился. Я чувствую, что я рядом. Есть идеи?