Можете да решите това, като използвате DB::statement
, DB:raw
и DB::select
.
Кодът е тестван в моята тестова среда Laravel 5.0 и работи перфектно.
Вашият mysql израз също е тестван и работи перфектно на MySQL конзолата.
Ето кода:
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;
")
);
Вижте резултатите
echo "utilizador_id | nome <br />";
foreach ($results as $result)
{
echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}
Запомнете към добавен use DB;
след пространството за имена:
<?php
namespace App\Http\Controllers;
use DB;
Направих кода за преглед на резултатите само за демонстриране на всички резултати, но от вас зависи как да манипулирате данните във вашия код.
Резултати от теста
Произволни резултати от вашия оператор mysql в MySQL конзолата
Произволни резултати от вашия оператор mysql в Laravel
Забележка:
1- Сам разреших този въпрос за вас, но се сблъсках с малък проблем и получих информация от Kryptonit3 във форума на Laracast.
2- Може да намерите други решения на този въпрос или той може да бъде решен по различни начини, но аз избрах да реша този начин.
Пълният въпрос и отговор в Бележка 1 могат да бъдат намерени тук .