Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como implementar minha instrução sql no Laravel?


Você pode resolver isso usando DB::statement , DB:raw e DB::select .

O código é testado no meu ambiente de teste Laravel 5.0 e funciona perfeitamente.

Sua instrução mysql também é testada e funciona perfeitamente no console MySQL.

Aqui está o 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 />";
}

Lembre-se para adicionar use DB; após o espaço de nomes:
<?php

namespace App\Http\Controllers;

use DB;

Eu fiz o código View results apenas para demonstrar todas as saídas de resultados, mas depende de você como manipular os dados em seu código.

Resultados do teste

Resultados aleatórios de sua instrução mysql no console MySQL

Resultados aleatórios de sua instrução mysql no Laravel

Observação:

1- Eu mesmo resolvi essa questão para você, mas enfrentei um pequeno problema e recebi informações do Kryptonit3 no fórum Laracast.

2- Você pode encontrar outras soluções para esta questão ou pode ser resolvida de maneiras diferentes, mas optei por resolver desta forma.

A pergunta e a resposta completas na Nota 1 podem ser encontradas aqui .