Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment implémenter mon instruction sql dans Laravel ?

Vous pouvez résoudre ce problème en utilisant DB::statement , DB:raw et DB::select .

Le code est testé sur mon environnement de test Laravel 5.0 et il fonctionne parfaitement.

Votre instruction mysql est également testée, elle fonctionne parfaitement sur la console MySQL.

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

Afficher les résultats

echo "utilizador_id | nome <br />";

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

Rappelez-vous pour ajouter use DB; après l'espace de nom :

<?php

namespace App\Http\Controllers;

use DB;

J'ai créé Afficher le code des résultats uniquement pour montrer tous les résultats, mais c'est à vous de décider comment manipuler les données dans votre code.

Résultats des tests

Résultats aléatoires de votre instruction mysql dans la console MySQL

Résultats aléatoires de votre instruction mysql dans Laravel

Remarque :

1- J'ai résolu cette question moi-même pour vous mais j'ai rencontré un petit problème et j'ai reçu des commentaires de Kryptonit3 sur le forum Laracast.

2- Vous pourriez trouver d'autres solutions à cette question ou elle peut être résolue de différentes manières, mais j'ai choisi de résoudre de cette façon.

La question et la réponse complètes dans la note 1 sont disponibles ici .