如何使用 orderBy 通过模型的方法进行排序?
考虑模型 User 和方法
public function fullName() {
return $this->firstName . $this->lastName;
}
我想做一些类似 orderBy('fullName') 的事情。这可能吗?我知道我可以使用查询生成器编写等效的代码,但我想保持我的模型方法不变。
最佳答案
我认为你有几个选择:
- 在数据库中创建一个 View ,其中包含
fullName
列。然后更改您的模型以使用该 View 。 - 创建一个计算列 fullName,以便在插入时使用firstName 和lastName 给出的值。
- 使用 Laravel 的 Collection 类。此类提供了一个 sortBy 方法,您可以使用该方法的属性。
如果您选择选项 2,请首先定义一个属性:
public function getFullNameAttribute()
{
return $this->firstName . $this->lastName;
}
然后使用 Laravel 的 Collection:
$items = Model::all()->sortBy('FullName');
注意:sortBy
的默认选项是升序,因此如果您希望降序排序:
$items = Model::all()->sortByDesc('FullName');
您可以在此处阅读有关访问器的更多信息:https://laravel.com/docs/5.7/eloquent-mutators#defining-an-accessor
关于laravel - 如何在 Laravel 中将 orderBy() 与模型方法一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53439483/