Mysql
 sql >> Database >  >> RDS >> Mysql

Come implementare la mia istruzione sql in Laravel?

Puoi risolverlo usando DB::statement , DB:raw e DB::select .

Il codice è stato testato sul mio ambiente di test Laravel 5.0 e funziona perfettamente.

Anche la tua istruzione mysql è stata testata e funziona perfettamente sulla console MySQL.

Ecco il codice:

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

Visualizza risultati

echo "utilizador_id | nome <br />";

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

Ricorda per aggiungere use DB; dopo lo spazio dei nomi:

<?php

namespace App\Http\Controllers;

use DB;

Ho creato Visualizza il codice dei risultati solo per dimostrare l'output di tutti i risultati, ma sta a te come manipolare i dati nel tuo codice.

Risultati del test

Risultati casuali della tua istruzione mysql nella console MySQL

Risultati casuali della tua istruzione mysql in Laravel

Nota:

1- Ho risolto questa domanda da solo per te, ma ho riscontrato un piccolo problema e ho ricevuto input da Kryptonit3 nel forum di Laracast.

2- Potresti trovare altre soluzioni a questa domanda o può essere risolta in diversi modi, ma ho scelto di risolvere in questo modo.

La domanda e la risposta complete nella Nota 1 sono disponibili qui .