Помощники,
мой первый пост, поиск и пробование различных решений и подходов - и, наконец, закончился здесь, спрашивая
У меня есть база данных с несколькими связанными таблицами. У клиента есть местоположение, в котором есть несколько параметров (жизненный цикл, например, план, сборка, запуск), и каждый параметр имеет разные схемы. В основном:
клиентам-> locations-> настройки-> схемы
Теперь я хочу получить список мест с настройками и информацией о схеме, где выбран поставщик схемы.
Как бы я написал этот запрос с помощью eloquent? Вот то, что я пробовал до сих пор, но, похоже, игнорируется пункт «где поставщик» ...
$locations = Locations::with(
['settings' => function($query) use ($request)
{
$query->with(
['circuits' =>function($query2) use ($request)
{
$query2->where('supplier', $request->supplier);
}
]
);
}
])
->where('customer_id', $customers_id)
->orderBy('country')
->orderBy('city')
->get();
Я уверен, что доступны все расширения "hasMany" и "ownTo".
Спасибо за чтение и ответ
udowsky
Обновление: рабочий код, основанный на подсказке Энвера:
$locations = Locations::with('settings')
->whereHas('settings.circuits', function($query) use ($request)
{
$query->where('supplier', $request->supplier);
}
)
->where('customer_id', $report->customers_id)
->orderBy('country')
->orderBy('city')
->get();
Подход HasManyThrough также работает плавно:
Расширение модели Locations:
public function circuits()
{
return $this->hasManyThrough('App\Circuits', '\App\Settings');
}
и затем используйте этот запрос:
$locations = Locations::with('circuits')
->whereHas('circuits', function($query) use ($request)
{
$query->where('supplier', $request->supplier);
}
)
->where('customer_id', $report->customers_id)
->orderBy('country')
->orderBy('city')
->get();
Спасибо всем!