Я хочу сортировать для нескольких столбцов в Laravel 4 с помощью метода orderBy()
из Eloquent. Запрос будет генерировать Eloquent следующим образом:
SELECT * FROM mytable ORDER BY coloumn1 DESC, coloumn2 ASC
Как я могу сделать?
Просто вызовите orderBy()
столько раз, сколько вам нужно. Например:
User::orderBy('name', 'DESC') ->orderBy('email', 'ASC') ->get();
Выдает следующий запрос:
SELECT * FROM `users` ORDER BY `name` DESC, `email` ASC
Вы можете сделать, как указал @rmobis в своем ответе, [Добавление в него чего-то большего]
Использование order by
два раза:
MyTable::orderBy('coloumn1', 'DESC') ->orderBy('coloumn2', 'ASC') ->get();
и второй способ сделать это,
Использование raw order by
:
MyTable::orderByRaw("coloumn1 DESC, coloumn2 ASC"); ->get();
Оба будут производить тот же запрос, что и ниже,
SELECT * FROM `my_tables` ORDER BY `coloumn1` DESC, `coloumn2` ASC
Поскольку @rmobis, указанный в комментарии первого ответа, вы можете передать как массив, чтобы упорядочить по столбцу, как это,
$myTable->orders = array( array('column' => 'coloumn1', 'direction' => 'desc'), array('column' => 'coloumn2', 'direction' => 'asc') );
еще один способ сделать это – iterate
в цикле,
$query = DB::table('my_tables'); foreach ($request->get('order_by_columns') as $column => $direction) { $query->orderBy($column, $direction); } $results = $query->get();
Надеюсь, поможет 🙂