【发布时间】:2019-04-25 15:22:51
【问题描述】:
如何使用 orderBy 按模型的方法排序?
考虑模型用户和方法
public function fullName() {
return $this->firstName . $this->lastName;
}
我想做一些类似 orderBy('fullName') 的事情。这可能吗?我知道我可以使用 Query Builder 制作等效代码,但我想保持模型方法不变。
【问题讨论】:
-
简短回答,不,那不可能。
orderBy()将被翻译成 SQLOrder BY它不知道你的fullname().. 作为最后的手段,你可以考虑usingDB::raw()to concat things。 -
所以我将不得不使用 DB:raw() 来重写我所有的方法
-
很遗憾,或者您可以使用非规范化技巧。创建一个名为
fullname的列,并将它分配给每个模型保存..哦,等等他们有orderByRawon 5.7 - 可能可以做类似->orderByRaw('CONCAT(firstname, lastname)')的事情,我可以知道你的Laravel 是什么版本吗? -
我使用的是 5.7。我想保留我现有的方法,但似乎我必须使用 DB:raw() 对它们进行编码。
-
不,你还有那个
orderByRaw:(
标签: laravel laravel-5 eloquent laravel-query-builder