将mysql子查询转换为Laravel

时间:2017-02-09 10:43:14

标签: mysql laravel

如何将mysql查询转换为laravel查询?这是查询

SELECT
  users.first_name,
  users.id AS uid,
  (
  SELECT
    COUNT(vpl_submissions.accept)
  FROM
    vpl_submissions
  INNER JOIN vpl ON vpl_submissions.vpl = vpl.id
  WHERE vpl.courseid = 2 
    AND vpl_submissions.accept = 1 
    AND vpl_submissions.userid = uid
) AS completed
FROM
  users
INNER JOIN course_enroles ON users.id = course_enroles.user_id
WHERE course_enroles.course_id = 2

2 个答案:

答案 0 :(得分:0)

在找到更好的解决方案之前,您可以像这样运行原始查询

$result = DB::select(DB::raw("
    select users.first_name,users.id AS uid,
    (
        select count(vpl_submissions.accept) 
        FROM vpl_submissions 
        INNER JOIN vpl on vpl_submissions.vpl = vpl.id 
        WHERE vpl.courseid=2 AND vpl_submissions.accept =1 
        AND vpl_submissions.userid = uid
    ) as completed 
    from users 
    inner join course_enroles on users.id = course_enroles.user_id 
    where course_enroles.course_id = 2
"));

答案 1 :(得分:0)

你可以试试这个。

    DB::table('users')
        ->join('course_enroles', 'users.id', '=', 'course_enroles.user_id')
        ->where("course_enroles.course_id", "=", 2)
        ->select(users.first_name,users.id AS uid,
            DB::raw("(SELECT COUNT(vpl_submissions.accept) FROM 
                    vpl_submissions INNER JOIN vpl ON vpl_submissions.vpl = vpl.id 
                     WHERE vpl.courseid = 2 
                           AND vpl_submissions.accept = 1 
                           AND vpl_submissions.userid = uid) as completed")
           )
        ->get();

这会对你有帮助。