Anda dapat menyelesaikan ini dengan menggunakan DB::statement
, DB:raw
dan DB::select
.
Kode diuji pada lingkungan pengujian Laravel 5.0 saya dan berfungsi dengan sempurna.
Pernyataan mysql Anda juga diuji dan berfungsi sempurna di konsol MySQL.
Ini kodenya:
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;
")
);
Lihat hasil
echo "utilizador_id | nome <br />";
foreach ($results as $result)
{
echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}
Ingat untuk menambahkan use DB;
setelah ruang nama:
<?php
namespace App\Http\Controllers;
use DB;
Saya telah membuat kode Lihat hasil hanya untuk mendemonstrasikan semua keluaran hasil, tetapi terserah Anda bagaimana memanipulasi data dalam kode Anda.
Hasil pengujian
Hasil acak dari pernyataan mysql Anda di konsol MySQL
Hasil acak dari pernyataan mysql Anda di Laravel
Catatan:
1- Saya telah memecahkan pertanyaan ini sendiri untuk Anda tetapi saya menghadapi sedikit masalah dan saya mendapat masukan dari Kryptonit3 di forum Laracast.
2- Anda mungkin menemukan solusi lain untuk pertanyaan ini atau dapat diselesaikan dengan cara yang berbeda, tetapi saya telah memilih untuk menyelesaikannya dengan cara ini.
Pertanyaan dan jawaban selengkapnya di Catatan 1, dapat ditemukan di sini .