简体   繁体   English

当 mysql 查询转换为 Laravel 查询构建器时出现错误?

[英]When mysql query convert in to laravel query builder getting some error?

When I migrate below mysql query in to laravel query builder, I am getting error.当我在 mysql 查询下方迁移到 Laravel 查询构建器时,出现错误。 Details are given below.详情如下。 Mysql queries are working correctly. Mysql 查询工作正常。 Please check and correct me.请检查并纠正我。 How can I convert mysql query in to laravel query builder properly.如何将 mysql 查询正确转换为 laravel 查询构建器。 Thanks谢谢

error错误

SQLSTATE[21000]: Cardinality violation: 1242 Subquery returns more than 1 row (SQL: select `c`.`firstname`, `c`.`lastname`, `p`.`order_id`, (SELECT VALUE FROM order_position_metas WHERE NAME = 'course_begin' AND order_position_id = order_position_metas.order_position_id) AS course_begin, (SELECT VALUE FROM order_position_metas WHERE NAME = 'course_end' AND order_position_id = order_position_metas.order_position_id) AS course_end, (SELECT ct.title FROM order_position_metas INNER JOIN course_types AS ct ON ct.id = VALUE WHERE NAME = 'course_type' AND order_position_id = order_position_metas.order_position_id) AS course_type from `order_position_metas` inner join `order_positions` as `p` on `p`.`id` = `order_position_metas`.`order_position_id` inner join `order_passengers` as `pp` on `pp`.`order_id` = `p`.`order_id` inner join `customers` as `c` on `c`.`id` = `pp`.`customer_id` where `name` = school_id and `value` = 62 order by `course_begin` asc, `course_end` asc, `course_type` asc)

Mysql Query mysql查询

This query is working此查询有效

SELECT c.firstname, c.lastname, p.order_id,
                              (SELECT VALUE FROM order_position_metas WHERE NAME = 'course_begin' AND order_position_id = pm.order_position_id) AS course_begin,
                              (SELECT VALUE FROM order_position_metas WHERE NAME = 'course_end' AND order_position_id = pm.order_position_id) AS course_end,
                              (SELECT ct.title FROM order_position_metas INNER JOIN course_types ct ON ct.id = VALUE WHERE NAME = 'course_type' AND order_position_id = pm.order_position_id) AS course_type
                              FROM order_position_metas pm INNER JOIN order_positions p ON p.id = pm.order_position_id INNER JOIN order_passengers pp ON pp.order_id = p.order_id INNER JOIN customers c ON c.id = pp.customer_id
                              WHERE pm.name = 'school_id' AND pm.value = '".$request->schoolID."' ORDER BY course_begin ASC, course_end ASC, course_type ASC

Laravel Querybuilder Laravel 查询生成器

$nestedQueries = Orderpositionmeta::select('c.firstname', 'c.lastname', 'p.order_id', DB::raw("(SELECT VALUE FROM order_position_metas WHERE NAME = 'course_begin' AND order_position_id = order_position_metas.order_position_id) AS course_begin"), DB::raw("(SELECT VALUE FROM order_position_metas WHERE NAME = 'course_end' AND order_position_id = order_position_metas.order_position_id) AS course_end"), DB::raw("(SELECT ct.title FROM order_position_metas INNER JOIN course_types AS ct ON ct.id = VALUE WHERE NAME = 'course_type' AND order_position_id = order_position_metas.order_position_id) AS course_type"))
                    ->join('order_positions AS p', 'p.id', '=', 'order_position_metas.order_position_id')
                    ->join('order_passengers AS pp', 'pp.order_id', '=', 'p.order_id')
                    ->join('customers AS c', 'c.id', '=', 'pp.customer_id')
                    ->where('name', 'school_id')
                    ->where('value', $request->schoolID)
                    ->orderBy('course_begin')
                    ->orderBy('course_end')
                    ->orderBy('course_type')
                    ->get();

In the error shows that subquery returns more than one row.在错误中显示子查询返回多于一行。 try subquery with LIMIT 1.尝试使用 LIMIT 1 的子查询。

$nestedQueries = Orderpositionmeta::select('c.firstname', 'c.lastname', 'p.order_id', 
DB::raw("(SELECT VALUE FROM order_position_metas WHERE NAME = 'course_begin' AND order_position_id = order_position_metas.order_position_id LIMIT 1) AS course_begin"), 
DB::raw("(SELECT VALUE FROM order_position_metas WHERE NAME = 'course_end' AND order_position_id = order_position_metas.order_position_id LIMIT 1) AS course_end"), 
DB::raw("(SELECT ct.title FROM order_position_metas INNER JOIN course_types AS ct ON ct.id = VALUE WHERE NAME = 'course_type' AND order_position_id = order_position_metas.order_position_id LIMIT 1) AS course_type"))
->join('order_positions AS p', 'p.id', '=', 'order_position_metas.order_position_id')
->join('order_passengers AS pp', 'pp.order_id', '=', 'p.order_id')
->join('customers AS c', 'c.id', '=', 'pp.customer_id')
->where('name', 'school_id')
->where('value', $request->schoolID)
->orderBy('course_begin')
->orderBy('course_end')
->orderBy('course_type')
->get();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM