Laravel OrderBy错误,5.8升级



由于orderBy命令停止工作,Laravel 5.8出现问题。我该如何重写控制器的这两个区域,使其停止抛出错误?


public function index(Request $request)
{
$clients = Client::orderBy('identifier', 'name')->paginate(15);
return view('admin.clients.index')->with('clients', $clients);
}

public function closed()
{
$sortBy = 'name';
$query = Client::onlyTrashed()->orderBy($sortBy, $sortBy == 'created_at' ? 'name' : 'asc')
->orderBy('created_at', 'name');
$projects = $query->get();
return view('admin.clients.index')->with(['clients' => $projects, 'sortBy' => $sortBy]);
}

orderBy(string$column,string$direction='asc'(

orderBy有两个参数,第二个参数是方向。5.8版本之前,如果您传递的方向值不是asc,它会自动将desc设置为方向值:

$this->{$this->unions ? 'unionOrders' : 'orders'}[] = [
'column' => $column,
'direction' => strtolower($direction) == 'asc' ? 'asc' : 'desc',
];

在Laravel 5.8+之后,如果方向值不是ascdesc,则会显示错误:

if (! in_array($direction, ['asc', 'desc'], true)) {
throw new InvalidArgumentException('Order direction must be "asc" or "desc".');
}

所以如果你想按两列排序,你可以使用两个orderBy:

$clients = Client::orderBy('identifier')->orderBy('name')->paginate(15);
# Raw SQL:
# select * from clients order by identifier asc, name asc

最新更新