Puoi risolverlo usando DB::statement
, DB:raw
e DB::select
.
Il codice è stato testato sul mio ambiente di test Laravel 5.0 e funziona perfettamente.
Anche la tua istruzione mysql è stata testata e funziona perfettamente sulla console MySQL.
Ecco il codice:
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;
")
);
Visualizza risultati
echo "utilizador_id | nome <br />";
foreach ($results as $result)
{
echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}
Ricorda per aggiungere use DB;
dopo lo spazio dei nomi:
<?php
namespace App\Http\Controllers;
use DB;
Ho creato Visualizza il codice dei risultati solo per dimostrare l'output di tutti i risultati, ma sta a te come manipolare i dati nel tuo codice.
Risultati del test
Risultati casuali della tua istruzione mysql nella console MySQL
Risultati casuali della tua istruzione mysql in Laravel
Nota:
1- Ho risolto questa domanda da solo per te, ma ho riscontrato un piccolo problema e ho ricevuto input da Kryptonit3 nel forum di Laracast.
2- Potresti trovare altre soluzioni a questa domanda o può essere risolta in diversi modi, ma ho scelto di risolvere in questo modo.
La domanda e la risposta complete nella Nota 1 sono disponibili qui .