Laravel Eloquent поле родительской таблицы orderBy () в отношениях «один ко многим» - PullRequest
0 голосов
/ 21 мая 2018

Итак, у меня есть таблица questions и таблица stepssteps может быть много questions.question принадлежит «шагу».

В моей таблице questions есть поле step_id, которое является внешним ключом поля id в моей таблице steps.У меня также есть поле number в моей таблице steps, которое НЕ имеет никакого отношения к полю id.Это просто число (1-12).

Таблица вопросов

---------------------------
| id | step_id | question |
---------------------------

Таблица шагов

-----------------------------
| id | number | description |
-----------------------------

У меня нормально работают отношения, которые я могу создавать, обновлятьи удалите вопросы из таблицы questions.Тем не менее, я работаю над страницей указателя и хочу собрать все вопросы и отсортировать их по полю number в таблице steps.

Я провел небольшое исследование, и яЯ нашел этот кусочек кода от Laracasts, но он не работает.На сайте предоставлено не так много информации.Нужна ли мне зависимость, чтобы получить эту функциональность, или есть собственный способ сделать это в laravel.

$questions = Question::join('steps', 'questions.step_id', '=', 'questions.id')
->orderBy('questions.number', 'asc')
->get(['questions.*']);

Я получаю следующую ошибку:

SQLSTATE [42S22]: Столбец не найден: 1054 Неизвестный столбец «questions.number» в «предложении заказа» (SQL: выберите questions. * Из questions внутреннее объединение steps в questions. step_id = questions. id заказ по questions. number asc)

Может быть, я просто недостаточно хорошо понимаю отношения, чтобы сделать это.Но я в растерянности.Любая помощь будет оценена.

1 Ответ

0 голосов
/ 21 мая 2018

Давайте разберемся, что не так с этим запросом (также обратите внимание, что вы делаете обычное SQL-соединение здесь, не используя отношение Eloquent - что правильно для этого случая):

// You are comparing the `step_id` on `questions` to the `id` on `questions`
// Which doesn't make sense, you should compare it to the `id` on `steps` table
$questions = Question::join('steps', 'questions.step_id', '=', 'questions.id')
    // You're trying to order by a column on `steps` table, but
    // you're explicitily looking for it on `questions` table
    ->orderBy('questions.number', 'asc') // <-- you get the SQL error because of this
    ->get(['questions.*']);

Теперь давайтеисправить эти проблемы:

$questions = Question::join('steps', 'questions.step_id', '=', 'steps.id')
    ->orderBy('steps.number', 'asc') 
    ->get(['questions.*']);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...