sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo implementar mi declaración sql en Laravel?

Puede resolver esto usando DB::statement , DB:raw y DB::select .

El código está probado en mi entorno de prueba Laravel 5.0 y funciona perfectamente.

Su declaración mysql también está probada, funciona perfectamente en la consola MySQL.

Aquí está el código:

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;
        ")
    );

Ver resultados

echo "utilizador_id | nome <br />";

foreach ($results as $result)
{
    echo $result->utilizador_id . "__________| " . $result->nome . "<br />";
}

Recuerda para agregar use DB; después del espacio de nombres:

<?php

namespace App\Http\Controllers;

use DB;

He creado Ver código de resultados solo para demostrar todos los resultados, pero depende de usted cómo manipular los datos en su código.

Resultados de la prueba

Resultados aleatorios de su declaración mysql en la consola MySQL

Resultados aleatorios de su declaración mysql en Laravel

Nota:

1- Resolví esta pregunta por mí mismo, pero tuve un pequeño problema y obtuve información de Kryptonit3 en el foro de Laracast.

2- Es posible que encuentres otras soluciones a esta pregunta o se puede resolver de diferentes maneras, pero he elegido resolver esta manera.

La pregunta y la respuesta completas en la Nota 1 se pueden encontrar aquí .