Du kan løse dette ved at bruge DB::statement
, DB:raw
og DB::select
.
Koden er testet på mit Laravel 5.0 testmiljø, og det fungerer perfekt.
Din mysql-sætning er også testet, den fungerer perfekt på MySQL-konsollen.
Her er koden:
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;
")
);
Se resultater
echo "utilizador_id | nome <br />";
foreach ($results as $result)
{
echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}
Husk til tilføjet use DB;
efter navnerummet:
<?php
namespace App\Http\Controllers;
use DB;
Jeg har kun lavet Vis resultatkode for at vise alle resultater, men det er op til dig, hvordan du manipulerer dataene i din kode.
Testresultater
Tilfældige resultater af din mysql-sætning i MySQL-konsollen
Tilfældige resultater af din mysql-sætning i Laravel
Bemærk:
1- Jeg har selv løst dette spørgsmål for dig, men jeg stod over for et lille problem, og jeg fik input fra Kryptonit3 i Laracast-forum.
2- Du kan måske finde andre løsninger på dette spørgsmål, eller det kan løses på forskellige måder, men jeg har valgt at løse denne måde.
Det fulde spørgsmål og svar i note 1 kan findes her .