php - 是否可以在 Laravel 中执行 orderBy() 或 orderBy()?
问题描述
可以orderBy()
or
orderBy()
在 Laravel Eloquent 中做吗?我当前的查询仅对item.ItemID
用户在前端单击排序时进行排序,但在用户单击前端排序时不会排序item.Desc
。
我尝试使用闭包将这些orderBy()
s 放在where()
子句中,但这也不起作用。有谁知道我可以纠正这个问题的好方法?
$this->model
->join('awards', 'item.ItemID', '=', 'awards.LinkID')
->join('opportunities', 'awards.AwardID', '=', 'branch.AwardID')
->groupBy('item.ItemID', 'item.Desc')
->orderBy('item.ItemID', $clickedDInventoryItemIdFlag ? 'DESC' : 'ASC')
->orderBy('item.Desc', $clickedDescriptionColumnFlag ? 'DESC' : 'ASC')
->select("item.ItemID", "item.Desc", "branch.OppID")
->get();
解决方案
SQL 中的排序是累积的,因此您总是按第一项排序,然后是第二项。相反,您可以根据条件操作查询:
$this->model
->join('awards', 'item.ItemID', '=', 'awards.LinkID')
->join('opportunities', 'awards.AwardID', '=', 'branch.AwardID')
->groupBy('item.ItemID', 'item.Desc')
->when(
$clickedDescriptionColumnFlag, // condition
fn ($q) => $q->orderBy('item.Desc') // true
fn ($q) => $q->orderBy('item.ItemID') // false
)
->select("item.ItemID", "item.Desc", "branch.OppID")
->get();
不过我不得不说,每当我看到这样的查询构建器连接发生时,这是一个很大的标志,告诉我你可能不了解模型关系。(尽管问题中没有这样的代码,但您在标题中使用了“Eloquent”这一事实!)我强烈建议您研究Eloquent的工作原理;对于除最重负载之外的所有负载,编码效率的提高远远超过数据库查询效率的轻微下降。
推荐阅读
- mysql - MySQL 查询执行时间快,但取行慢?
- blockchain - 在矿池服务中,客户端是否执行整个 PoW 算法?
- android - Android:Fragment Change 上的平滑 DrawerLayout 动画
- mongodb - 如何:$merge 和按需物化视图
- python - 如何在 django 中测试从外部端点请求数据的函数
- reactjs - 如何使用 VictoryChart 为 VictoryBar 绘制轴
- flutter - 如何在颤振 sqflite 中显示字符串值
- javascript - 如何防止桌子上随机生成的图像在同一位置生成?
- python - 如何删除除数字之外的所有内容(韩国公司的网络爬取市值)
- react-native - gmail 应用程序中的移动深层链接到特定配置文件