сортировать родителей относительно ребенка приписывать с помощью красноречивых - PullRequest
0 голосов
/ 17 октября 2019

У меня есть модель '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

1 Ответ

1 голос
/ 17 октября 2019

Вы не можете сортировать вложенные отношения только с помощью построителя запросов. Вместо этого используйте метод sortBy Коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...