Sie können dies lösen, indem Sie DB::statement
verwenden , DB:raw
und DB::select
.
Der Code wurde auf meiner Laravel 5.0-Testumgebung getestet und funktioniert perfekt.
Ihre MySQL-Anweisung wurde ebenfalls getestet und funktioniert perfekt auf der MySQL-Konsole.
Hier ist der 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;
")
);
Ergebnisse anzeigen
echo "utilizador_id | nome <br />";
foreach ($results as $result)
{
echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}
Denken Sie daran um use DB;
hinzuzufügen nach dem Namensraum:
<?php
namespace App\Http\Controllers;
use DB;
Ich habe View results Code nur erstellt, um die gesamte Ergebnisausgabe zu demonstrieren, aber es liegt an Ihnen, wie Sie die Daten in Ihrem Code manipulieren.
Testergebnisse
Zufällige Ergebnisse Ihrer MySQL-Anweisung in der MySQL-Konsole
Zufällige Ergebnisse Ihrer MySQL-Anweisung in Laravel
Hinweis:
1- Ich habe diese Frage selbst für Sie gelöst, aber ich hatte ein kleines Problem und ich erhielt Input von Kryptonit3 im Laracast-Forum.
2- Möglicherweise finden Sie andere Lösungen für diese Frage oder sie kann auf andere Weise gelöst werden, aber ich habe mich für diese Lösung entschieden.
Die vollständige Frage und Antwort in Anmerkung 1 finden Sie hier .