我有一个角色模型,其中有一些访问器,用于计算与该模型相关的一些项目。 我无法使用 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');
如果您更喜欢在数据库调用中执行此操作,则可以使用联接来实现相同的目的(就性能而言,它更好)。
关于mysql - 如何在 Laravel 中对访问器进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58165616/