J. *_*son 1 php mysql foreign-keys laravel eloquent
所以我有桌子questions和桌子steps.该steps可以有很多questions.在question属于一个"台阶".
我有一个step_id在我的领域questions表,这是一个外键id字段在我的steps表.我的表中也有一个number字段steps与id字段没有任何关系.这只是一个数字(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内连接steps上questions.step_id=questions.id为了通过questions.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.*']);
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)
| 归档时间: |
|
| 查看次数: |
576 次 |
| 最近记录: |