Puede resolver esto usando DB::statement
, DB:raw
y DB::select
.
El código está probado en mi entorno de prueba Laravel 5.0 y funciona perfectamente.
Su declaración mysql también está probada, funciona perfectamente en la consola MySQL.
Aquí está el código:
DB::statement(DB::raw('SET @prev=0,@rownum=0'));
$results =
DB::select(
DB::raw("
SELECT utilizador_id, nome
FROM (
SELECT *,
IF( @prev <> utilizador_id,
@rownum := 1,
@rownum := @rownum+1
) AS rank,
@prev := utilizador_id,
@rownum
FROM (
SELECT * FROM `anuncios`
ORDER BY utilizador_id, rand()
) AS random_ads
) AS ads_ranked
WHERE rank <= 2;
")
);
Ver resultados
echo "utilizador_id | nome <br />";
foreach ($results as $result)
{
echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}
Recuerda para agregar use DB;
después del espacio de nombres:
<?php
namespace App\Http\Controllers;
use DB;
He creado Ver código de resultados solo para demostrar todos los resultados, pero depende de usted cómo manipular los datos en su código.
Resultados de la prueba
Resultados aleatorios de su declaración mysql en la consola MySQL
Resultados aleatorios de su declaración mysql en Laravel
1- Resolví esta pregunta por mí mismo, pero tuve un pequeño problema y obtuve información de Kryptonit3 en el foro de Laracast.
2- Es posible que encuentres otras soluciones a esta pregunta o se puede resolver de diferentes maneras, pero he elegido resolver esta manera.
La pregunta y la respuesta completas en la Nota 1 se pueden encontrar aquí .