U kunt dit oplossen door DB::statement
. te gebruiken , DB:raw
en DB::select
.
De code is getest op mijn Laravel 5.0 testomgeving en het werkt perfect.
Je mysql-statement is ook getest, het werkt perfect op de MySQL-console.
Hier is de code:
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;
")
);
Resultaten bekijken
echo "utilizador_id | nome <br />";
foreach ($results as $result)
{
echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}
Onthoud om use DB;
na de naamruimte:
<?php
namespace App\Http\Controllers;
use DB;
Ik heb alleen resultatencode weergeven gemaakt om alle resultaten te demonstreren, maar het is aan jou hoe je de gegevens in je code manipuleert.
Testresultaten
Willekeurige resultaten van uw mysql-instructie in de MySQL-console
Willekeurige resultaten van uw mysql-statement in Laravel
Opmerking:
1- Ik heb deze vraag zelf voor je opgelost, maar ik had een klein probleempje en ik kreeg input van Kryptonit3 op het Laracast-forum.
2- Misschien vindt u andere oplossingen voor deze vraag of het kan op verschillende manieren worden opgelost, maar ik heb ervoor gekozen om op deze manier op te lossen.
De volledige vraag en het antwoord in Note 1 vindt u hier .