Laravel Eloquent orderBy()一对多关系中的父表字段

J. *_*son 1 php mysql foreign-keys laravel eloquent

所以我有桌子questions和桌子steps.该steps可以有很多questions.在question属于一个"台阶".

我有一个step_id在我的领域questions表,这是一个外键id字段在我的steps表.我的表中也有一个number字段stepsid字段没有任何关系.这只是一个数字(1-12).

问题表

---------------------------
| id | step_id | question |
---------------------------
Run Code Online (Sandbox Code Playgroud)

步骤表

-----------------------------
| id | number | description |
-----------------------------
Run Code Online (Sandbox Code Playgroud)

我之间的关系很好,因为我可以创建,更新和删除questions表中的问题.但是,我正在处理索引页面,我想抓住所有问题并按表中的number字段对它们进行排序steps.

我已经完成了一些研究,我从Laracasts中找到了一些代码,但它没有用.网站上没有提供太多信息.我是否需要依赖项才能获得此功能,或者是否有本地方法在laravel中执行此操作.

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

我收到以下错误:

未发现柱::SQLSTATE [42S22]在'顺序条款' 1054未知列'questions.number'(SQL:选择questions.*从 questions内连接stepsquestions.step_id= questions.id为了通过questions.numberASC)

也许我只是不能很好地理解这种关系.但我不知所措.任何帮助,将不胜感激.

Dev*_*evK 5

让我们分解一下这个查询的错误(还要注意你在这里进行正常的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.*']);
Run Code Online (Sandbox Code Playgroud)

现在让我们解决这些问题:

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