mysql - 如何在 Laravel 中对访问器进行排序?

标签 mysql laravel laravel-5 laravel-5.8

我有一个角色模型,其中有一些访问器,用于计算与该模型相关的一些项目。 我无法使用 orderby,因为数据库中不存在列,并且无法使用 sortby,因为我们使用数据表(带有角度)。在 postgres 中可能可以使用横向连接,但我使用 mysql。还有其他方法可以做到这一点吗? 访问器例如。

protected $appends = [
     "changes_count"
];

public function getChangesCountAttribute()
{
    return $this->changes()->where('type', 'Change')->count();
}

public function indexWithPagination(Request $request)
{
    //Sorting
    $column = isset($request->sortField) ? $request->sortField : null;
    $order_by = 'asc';
    if (isset($request->sortOrder)) {
        $order_by = $request->sortOrder === 1 ? 'asc' : 'desc';
    }

    $record = Character::with(Character::getRelationshipsArray());

    switch ($column) {
            case 'cast':
                $record->orderBy('character_number', $order_by);
                break;

            case 'changes_count':
                ??
                break;

            default:
                $record->orderBy($column, $order_by);
                break;
        }

        return getIndexWithPagination($record);
  }

最佳答案

您可以按访问器对结果集合进行排序,显然,查询无法排序,因为它不在数据库中。

$record->sortByDesc('changes_count'); // sort using collection method

// or ascending:
$record->sortBy('changes_count');

如果您更喜欢在数据库调用中执行此操作,则可以使用联接来实现相同的目的(就性能而言,它更好)。

Reference Question

关于mysql - 如何在 Laravel 中对访问器进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58165616/

相关文章:

php - openssl 扩展丢失(Composer 安装 openSUSE)

php - 有条件地使用逆关系过滤数据透视表 - Laravel 5

php - 在laravel 5中搜索belongsToMany关系

php - 如何在 ZF2 中的每个页面上运行一个函数

php - Laravel 5 - 多对多关系 - 获取枢轴数据

laravel Composer 安装无法解决 tymon/jwt-auth 的可安装包

php - 创建 Laravel 5 项目时出错

PHP MYSQL QUERY ORDER BY desc问题

python - 使用 pyinstaller 编译时 "except"期间的 mysql.connector 错误?

mysql - 动态连接 MySQL 表