如何在larael 4.2中执行此sql请求

时间:2015-09-02 17:12:40

标签: laravel

如何在laravel 4.2中执行此请求:

    SELECT 
`p`.`id_pseudo`,
`nom`,
`prenom`,
`email`,
`code_court_etat`,
DATE_FORMAT(pv.date_visite, '%d/%m/%Y %h:%i') AS date_derniere_visite,
COUNT(pp.id_pseudo_produit) AS qte_produit
FROM
`pseudo` AS `p`
    LEFT JOIN
`pseudo_produit` AS `pp` ON `p`.`id_pseudo` = `pp`.`id_pseudo`
    LEFT JOIN
`pseudo_visite` AS `pv` ON `pv`.`id_pseudo` = `p`.`id_pseudo`
    AND `date_visite` = select max(date_visite) from pseudo_visite where id_pseudo = p.id_pseudo
GROUP BY `p`.`id_pseudo` , `nom` , `prenom` , `email` , `code_court_etat` , `date_derniere_visite`
ORDER BY `p`.`nom` ASC , `p`.`prenom` ASC

我试过了:

$requete = DB::table('pseudo as p')
        ->leftjoin('pseudo_produit as pp', 'p.id_pseudo', '=', 'pp.id_pseudo')
        ->leftJoin('pseudo_visite as pv', function($join) 
                { 
                    $join->on('pv.id_pseudo', '=', 'p.id_pseudo')
                    ->where('date_visite', '=', DB::raw('select max(date_visite) from pseudo_visite where id_pseudo = p.id_pseudo'));

                })  
        ->select('p.id_pseudo', 'nom', 'prenom', 'email', 'code_court_etat', 
                DB::raw('date_format(pv.date_visite, "%d/%m/%Y %h:%i") as date_derniere_visite'),
                DB::raw('count(pp.id_pseudo_produit) as qte_produit'))
        ->orderby('p.nom','asc')->orderby('p.prenom', 'asc')
        ->groupBy('p.id_pseudo', 'nom', 'prenom', 'email', 'code_court_etat', 'date_derniere_visite');

没有成功。因为子查询中出现了一个不需要的引号。

任何帮助将不胜感激。

多米尼克

1 个答案:

答案 0 :(得分:0)

也许不是您正在寻找的答案,但您不会 使用来使用查询生成器只是因为它是Laravel。在查询生成器效率低下或无效的情况下,您可以使用原始查询。

看看Database Documentation。您已经有了查询,因此您可以运行它:

$results = DB::select('...');

您的$results将是返回行的数组。