Итак, у меня есть таблица questions и таблица steps. steps может иметь много questions. question относится к «ступенькам».
У меня есть поле step_id в моей таблице questions, которое является внешним ключом поля 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]: Column not found: 1054 Unknown column 'questions.number' in 'order clause' (SQL: select
questions.* fromquestionsinner joinstepsonquestions.step_id=questions.idorder byquestions.numberasc)
Может, я просто недостаточно хорошо разбираюсь в отношениях, чтобы делать это. Но я в растерянности. Любая помощь будет оценена по достоинству.






Давайте разберемся, что не так с этим запросом (также обратите внимание, что здесь вы выполняете обычное соединение 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.*']);
+ devk @devk Спасибо за ответ, теперь есть способ разбить этот результат на страницы? Я забыл задать это в своем предыдущем вопросе.
@ J.Robinson Ага, просто сделай это: ->select('questions.*')->paginate() вместо ->get(..).
Вы, сэр, АБСОЛЮТНЫЙ БОСС! большое спасибо! : P Это очень помогает! : P Заставил работать на 100% так, как я хотел!
Хороший ответ. Хорошее объяснение.