简体   繁体   English

由 Laravel 生成的 SQL 不起作用,但是如果我直接在 Z0C7E3F87672BBADC30 上运行 SQL 它可以工作

[英]SQL generated by Laravel doesn't work, but if I run the SQL direct on PhpMyAdmin it works

I was trying to get the name of Users in my system and I use the following code on PHP Laravel:我试图在我的系统中获取用户的名称,并在 PHP Laravel 上使用以下代码:

$course_assessments = CourseAssessment::where('canvas_assignment_id', '=', $canvas_assignment_id)
        ->join('assessment_submissions', 'assessment_submissions.courses_assessments_id', '=', 'course_assessments.id')
        ->join('users', 'users.id', '=', 'assessment_submissions.evaluated_user')
        ->groupby('users.name')
        ->get();

When I run the code I got the following error:当我运行代码时,出现以下错误:

SQLSTATE[42000]: Syntax error or access violation: 1055 'laravel.course_assessments.id' isn't in GROUP BY (SQL: select * from `course_assessments` inner join `assessment_submissions` on `assessment_submissions`.`courses_assessments_id` = `course_assessments`.`id` inner join `users` on `users`.`id` = `assessment_submissions`.`evaluated_user` where `canvas_assignment_id` = 248302 group by `assessment_submissions`.`evaluated_user`)

But if I get the SQL code from the error above:但是,如果我从上面的错误中得到 SQL 代码:

select * from `course_assessments` inner join `assessment_submissions` on `assessment_submissions`.`courses_assessments_id` = `course_assessments`.`id` inner join `users` on `users`.`id` = `assessment_submissions`.`evaluated_user` where `canvas_assignment_id` = 248302 group by `assessment_submissions`.`evaluated_user`

and I run the code on PhpMyAdmin, the code it works, but show me this warning message:我在 PhpMyAdmin 上运行代码,它工作的代码,但显示此警告消息:

Current selection does not contain a unique column. Grid edit, checkbox, Edit, Copy and Delete features are not available. 

How can I fix that on Laravel?如何在 Laravel 上解决这个问题?

When you group rows with GROUP BY, the database doesn't know which row should be selected.当您使用 GROUP BY 对行进行分组时,数据库不知道应该选择哪一行。 You have to specifically tell the database which row to be shown, for example, FIRST(name) will select the first row of column name.您必须明确告诉数据库要显示哪一行,例如, FIRST(name)将 select 列名的第一行。

Except the column in GROUP BY, which will be unique.除了 GROUP BY 中的列,它将是唯一的。

So in your query, select * won't work, you should add select() and specify the field and aggregate function.因此,在您的查询中, select *将不起作用,您应该添加select()并指定字段并聚合 function。

        ->select('users.name', DB::raw('FIRST(course_assessments.field_name)'))

users.name is in GROUP BY so it doesn't need aggregate function, other fields need aggregate function. users.name在 GROUP BY 中,因此不需要聚合 function,其他字段需要聚合 function。

Try this:尝试这个:

From:从:

 $course_assessments = CourseAssessment::where('canvas_assignment_id', '=', $canvas_assignment_id)
            ->join('assessment_submissions', 'assessment_submissions.courses_assessments_id', '=', 'course_assessments.id')
            ->join('users', 'users.id', '=', 'assessment_submissions.evaluated_user')
            ->groupby('users.name')
            ->get();

To:至:

 $course_assessments = CourseAssessment::where('assessment_submissions.canvas_assignment_id', '=', $canvas_assignment_id)
            ->join('assessment_submissions', 'assessment_submissions.courses_assessments_id', '=', 'course_assessments.id')
            ->join('users', 'users.id', '=', 'assessment_submissions.evaluated_user')
            ->groupby('users.name')
            ->get();

I am assuming assessment_submissions table contains canvas_assignment_id column.我假设assessment_submissions 表包含canvas_assignment_id 列。

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

相关问题 带有限制的 SQL 查询在 phpmyadmin 中不起作用 - SQL Query with Limit doesn't work in phpmyadmin phpMyAdmin中的请求与Laravel Query Builder一起使用似乎不起作用 - request in PhpMyAdmin works, with Laravel Query Builder, doesn't seem to work 在 php 中执行 sql 查询不起作用,但在 phpmyadmin 中执行查询 - execute sql query in php doesn't work ,but the query work in phpmyadmin sql语句在phpMyAdmin中有效,但在mysql_query中不起作用 - sql statement works in phpMyAdmin but won't work in mysql_query SQL选择查询可与phpMyAdmin一起使用,但不会与PHP Web服务一起显示任何输出 - SQL select query works with phpMyAdmin but doesn't show any output with PHP web service 当我尝试在 php 中运行该查询时,该查询不执行,它适用于 SQL 执行 - The query doesn t execute when I try to run it in php, it works in SQL execution INSERT查询在SQL中工作,但在Android应用程序中不起作用 - INSERT query works in SQL but doesn't work from android app 查询适用于mysql,但不适用于php sql调用 - Query works with mysql but doesn't work with php sql call PDO查询不起作用,但是生成的SQL在PHPMyAdmin上运行 - PDO query doesnt work but generated SQL runs on PHPMyAdmin PHP中查询的结果为空,但是当我从PHPMyAdmin运行SQL查询时,它可以工作 - Empty result of query in PHP , but when I run an SQL query from PHPMyAdmin, it works
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM