[英]Laravel Database Strict Mode
难怪请帮帮我。
我的查询是:- Invoice::join('orders', 'orders.invoice_id', '=', 'invoices.id')->groupBy('invoices.id')->get();
然后我得到一个错误:语法错误或访问冲突:1055 'invoices.reference_number' isn't in GROUP BY
当我根据错误更新查询时,查询是:-
$invoices = Invoice::join('orders', 'orders.invoice_id', '=', 'invoices.id')->groupBy('invoices.id','invoices.reference_number','invoices.customer_address_id','invoices.country_id','invoices.paid_at','invoices.due_date','invoices.created_at','invoices.updated_at','invoices.deleted_at','orders.id','orders.currency_id','orders.user_id','orders.customer_id','orders.created_at','invoices.updated_at')->get();
现在查询工作但在那种情况下,我不能使用select()
,它返回groupBy()
中的列
所以我做了谷歌然后发现如果我关闭数据库严格模式然后它会工作然后我做了并且它工作良好,但我不想关闭严格模式。
另外,我做了关于数据库模式的研究https://dev.mysql.com/doc/refman/5.5/en/faqs-sql-modes.html https://dev.mysql.com/doc/refman/5.5/ en/sql-mode.html
然后我发现查询:- SELECT @@GLOBAL.sql_mode; SELECT @@SESSION.sql_mode;
SELECT @@GLOBAL.sql_mode; SELECT @@SESSION.sql_mode;
但结果是空白
如果我在数据库中执行 - select * from invoices inner join orders on orders.invoice_id = invoices.id where invoices.deleted_at is null group by invoices.id
然后它工作正常意味着没有模式验证槽 mySQL 它已经配置了 Laravel 的一面
另外,我在 laravel 文档中没有找到相关的数据库模式
如果我做错了什么,请帮助我。
而且我还想知道 laravel 中启用了谁的数据库严格模式验证,因为我想知道什么严格验证给我一个错误。
在config/database.php
mysql
数组中更改此行
'strict' => true,
至
'strict' => false,
发生这种情况时,请添加此函数的顶部
public function index() {
DB::statement("SET sql_mode = '' ");
# rest of your Joins
}
在数据库文件中设置连接后运行此查询
SET sql_mode = false;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.