wherein two orderby multiple columns php laravel

php - two - ¿Cómo usar order by para múltiples columnas en laravel 4?



like laravel (3)

Aquí hay otro truco que se me ocurrió para mi clase de repositorio base donde necesitaba ordenar por un número arbitrario de columnas:

public function findAll(array $where = [], array $with = [], array $orderBy = [], int $limit = 10) { $result = $this->model->with($with); $dataSet = $result->where($where) // Conditionally use $orderBy if not empty ->when(!empty($orderBy), function ($query) use ($orderBy) { // Break $orderBy into pairs $pairs = array_chunk($orderBy, 2); // Iterate over the pairs foreach ($pairs as $pair) { // Use the ''splat'' to turn the pair into two arguments $query->orderBy(...$pair); } }) ->paginate($limit) ->appends(Input::except(''page'')); return $dataSet; }

Ahora puedes hacer tu llamada así:

$allUsers = $userRepository->findAll([], [], [''name'', ''DESC'', ''email'', ''ASC''], 100);

Quiero ordenar columnas múltiples en Laravel 4 mediante el método de uso orderBy() de Eloquent. La consulta generará por Eloquent de esta manera:

SELECT * FROM mytable ORDER BY coloumn1 DESC, coloumn2 ASC

¿Como lo puedo hacer?


Puedes hacer lo que @rmobis ha especificado en su respuesta, [Añadiéndole algo más]

Usar el order by dos veces:

MyTable::orderBy(''coloumn1'', ''DESC'') ->orderBy(''coloumn2'', ''ASC'') ->get();

y la segunda forma de hacerlo es

Usando raw order by :

MyTable::orderByRaw("coloumn1 DESC, coloumn2 ASC"); ->get();

Ambos producirán la misma consulta que sigue,

SELECT * FROM `my_tables` ORDER BY `coloumn1` DESC, `coloumn2` ASC

Como se especifica @rmobis en el comentario de la primera respuesta, puede pasar como una matriz para ordenar por columna de esta manera,

$myTable->orders = array( array(''column'' => ''coloumn1'', ''direction'' => ''desc''), array(''column'' => ''coloumn2'', ''direction'' => ''asc'') );

una forma más de hacerlo es iterate en loop,

$query = DB::table(''my_tables''); foreach ($request->get(''order_by_columns'') as $column => $direction) { $query->orderBy($column, $direction); } $results = $query->get();

Espero eso ayude :)


Simplemente invoque orderBy() tantas veces como lo necesite. Por ejemplo:

User::orderBy(''name'', ''DESC'') ->orderBy(''email'', ''ASC'') ->get();

Produce la siguiente consulta:

SELECT * FROM `users` ORDER BY `name` DESC, `email` ASC