У меня есть модель 'job', связанная с моделью 'job_translation', например:
/**
* Get the translations for the job.
*/
public function translations()
{
return $this->hasMany('App\Models\JobTranslation');
}
Я хочу создать динамический маршрут API, который может принимать несколько параметров для фильтрации или сортировки запроса порабочие места. Для этого у меня есть такой вид контроллера (извлечение):
public function index(Request $request)
{
$queryJob = Job::query();
// filter on the job short_name
if ($request->has('short_name')) {
$queryJob->where('short_name', 'ilike', '%'.$request->short_name.'%');
}
// filter on the translation
if ($request->has('translation')) {
$queryJob->whereHas('translations', function ($query) use ($request) {
$queryJob->where('internal_translation', 'ilike', '%'.$request->translation.'%');
});
}
// sort by the external translation
if ($request->has('order.external_translation')) {
// var_dump($request->input('order.external_translation'));
// var_dump($request->server('HTTP_ACCEPT_LANGUAGE'));
$queryJob->whereHas('translations', function ($query) use ($request) {
$query->where('language_id', $request->server('HTTP_ACCEPT_LANGUAGE'));
$query->orderBy('external_translation', 'asc');
});
/*
$queryJob->with(['translations' => function ($query) use ($request) {
$query->where('language_id', $request->server('HTTP_ACCEPT_LANGUAGE'));
$query->orderBy('external_translation', 'asc');
}]);
*/
}
// security for the qty of items per page
$qtyItemsPerPage = 15;
if ($request->has('qtyItemsPerPage')) {
if (is_numeric($request->qtyItemsPerPage) && $request->qtyItemsPerPage <= 50) {
$qtyItemsPerPage = $request->qtyItemsPerPage;
}
}
$jobs = $queryJob->paginate($qtyItemsPerPage);
return JobResource::collection($jobs);
Моя проблема заключается в условии сортировки (остальные в порядке). Когда я использую этот вид URL:
jobs? Order [external_translation] = asc
Я много чего пробовал безуспешно (прокомментировал в коде), результат никогда не сортируется как яхотеть. Я думаю, что мой пб в отношениях между двумя моделями.
Так как же сортировать родителей по атрибуту своих детей, используя красноречивые слова?
Спасибо за вашу помощь.
Dom