laravel - 如何在 Laravel 中将 orderBy() 与模型方法一起使用

标签 laravel laravel-5 eloquent laravel-query-builder

如何使用 orderBy 通过模型的方法进行排序?

考虑模型 User 和方法

public function fullName() {
    return $this->firstName . $this->lastName;
}

我想做一些类似 orderBy('fullName') 的事情。这可能吗?我知道我可以使用查询生成器编写等效的代码,但我想保持我的模型方法不变。

最佳答案

我认为你有几个选择:

  1. 在数据库中创建一个 View ,其中包含 fullName 列。然后更改您的模型以使用该 View 。
  2. 创建一个计算列 fullName,以便在插入时使用firstName 和lastName 给出的值。
  3. 使用 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/

相关文章:

javascript - 将onclick函数设置为laravel中的 anchor 元素

拉拉维尔 4 : how to update multiple fields in an Eloquent model?

php - Laravel 5.3 多重身份验证设置

php - 在 Laravel 5 中限制一个对象可以拥有的对象数量

php - Laravel,如何确定查询构建器是否已包含 "order"?

php - 如何从 Laravel 获取 CSRF token 并将其传递到 python 脚本中

Laravel 超链接到表中的特定记录

php - 拉拉维尔 : How to create dynamic functions (methods) (using foreach loop) in class

拉拉维尔 5.1 : how can i update one row only with where clause?

laravel - 使用 Laravel 中的 block 或游标优化代码