OrderBy от отношения, Laravel - PullRequest
0 голосов
/ 08 мая 2020

У меня есть таблица вопросов, в которой я использую:

    $query->orderBy($request->sort_by, ($request->sort_direction === 'false') ? 'asc' : 'desc');
   //sort_by and sort_direction are from front-end, and this works for my main table

Но в этой таблице у меня есть 2 отношения, и я хочу отсортировать по столбцу из таблицы, которая имеет отношение, а также к отсортировать по их количеству.

Пример: у вопроса много answer_history, у каждой answer_history есть столбец answer_type («нет» или «пропущено»). Я хочу отсортировать по количеству (answer_type = 'none').

enter image description here

$query = Question::select(['id', 'free_text', 'title', 'best_match',  'created_at']);
$query->with('answer_history');
$query->with(['bestMatch']);
$query->orderBy($request->sort_by, ($request->sort_direction === 'false') ? 'asc' : 'desc');
return response()->json($query->paginate($request->per_page));
//this works just for main table

ОБНОВЛЕНИЕ:

if($request->sort_by){
   if($request->sort_by === 'best_match'){
      $query->orderBy(function ($bestMatch, $key) {
            return count($bestMatch['name']);
      },($request->sort_direction === 'false') ? 'asc' : 'desc');
   }else{
    $query->orderBy($request->sort_by, ($request->sort_direction === 'false') ? 'asc' : 'desc');
   }
}
// I tried to do this for a column from best_match, but is not working

1 Ответ

1 голос
/ 08 мая 2020

Вы можете применить проверку связи, если загружаете ее лениво.

->with(['bestMatch' => function ($query) use ($request){
      if($request->sort_by && $request->sort_by === 'best_match') {
          $query->orderBy('name', 'desc');
      }
   }
])

Вы можете сделать то же самое для 'answer_history'.

Примечание: Код не проверен.

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