将mysql查询转换为laravel的DB facade

时间:2015-11-09 22:59:36

标签: php mysql laravel laravel-5

我需要将此mySQL查询转换为laravel DB()外观:

SELECT
   t.*,
   t_users.username as topic_user,
   last_reply.user_id as last_reply_user_id,
   r_users.username as last_reply_username,
   last_reply.replies_count,
   IFNULL(last_reply.created_at,t.created_at) as last_update

FROM
   topics as t
   left join users as t_users on t_users.id = t.user_id
   left join ( select r.*,count(r.id) as replies_count from (select * from replies order by created_at desc) as r group by r.topic_id ) as last_reply on last_reply.topic_id = t.id
   left join users as r_users on r_users.id = last_reply.user_id

ORDER BY IFNULL(last_reply.created_at,t.created_at) DESC

我现在尝试了很多不同的方法,差不多2天了,但是无法让它发挥作用。最新的一个是:

        $query = DB::table('topics as t')
            ->leftJoin('users as t_users', 't_users.id', '=', 't.user_id')
            ->leftJoin(DB::raw('select r.*,count(r.id) as replies_count from (select * from replies order by created_at desc) as r group by r.topic_id'), 'last_reply.topic_id', '=', 't.id')
            ->leftJoin('users as r_users', 'r_users.id', '=', 'last_reply.user_id')
            ->select(
               't.*,
               t_users.username as topic_user,
               last_reply.user_id as last_reply_user_id,
               r_users.username as last_reply_username,
               last_reply.replies_count,
               IFNULL(last_reply.created_at,t.created_at) as last_update'
            );

并导致此错误:

  

SQLSTATE [42000]:语法错误或访问冲突:1064您有   SQL语法错误;查看与您的手册相对应的手册   MySQL服务器版本,用于在'select附近使用正确的语法   r。*,count(r.id)as replies_count from(select * from replies order by   cre'在第1行(SQL:选择t*,为``从topics开始,t离开   在userst_users加入t_usersid = tuser_id左连接   选择r。*,将(r.id)作为replies_count从(选择*来自回复)中选择   由r_topic_id on作为r group by by created_at desc)   last_replytopic_id = tid离开加入users作为r_users   r_usersid = last_replyuser_id

感谢您的帮助!

0 个答案:

没有答案