Laravel 5.8升级时出现错误

问题描述 投票:0回答:1

Laravel 5.8遇到麻烦,因为orderBy命令停止工作。我该如何重写控制器的这两个区域,以使其不再引发错误?


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]);
}
laravel laravel-5.8
1个回答
0
投票

orderBy(字符串$ column,字符串$ 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
© www.soinside.com 2019 - 2024. All rights reserved.