gpt4 book ai didi

mysql - Eloquent 中的查询在它不应该起作用时起作用 - 在 MySQL 中,它按预期失败

转载 作者:行者123 更新时间:2023-11-29 10:04:08 25 4
gpt4 key购买 nike

如果你在 MySQL 中设置了整数字段,不允许使用 null,默认为 null,并且你编写了一个省略此字段的查询,那么在 Laravel 中查询仍然会执行,并且不使用默认值 null,而是使用写为“0”。

如果我采用 Eloquent/查询生成器生成的精确查询,并在 MySQL 中运行它,它会失败,正确地说明相关字段必须具有默认值。

为什么会出现这种差异? eloquent/query builder/pdo 到底在做什么?!

创建表语法如下:

CREATE TABLE `chapters` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`account_id` int(10) unsigned NOT NULL,
`season_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `chapters_account_id_index` (`account_id`),
KEY `chapters_season_id_index` (`season_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6060 DEFAULT CHARSET=utf8
COLLATE=utf8_unicode_ci

在 MySQL 中执行插入并省略 account_id 失败 - 正如它应该的那样。尽管生成的查询是正确的,但在 Eloquent/Laravel 中执行相同的操作却不会。

最佳答案

所以我明白发生了什么事。 Laravel 默认情况下在 config/database.php 中将严格规则设置为 false。这会关闭有关严格模式的各种选项,例如完整分组依据、严格转换表等。

我们所做的是在 my.cnf 上设置 STRICT_ALL_TABLES,然后强制 Laravel 设置为 strict = true。这样就解决了。

关于mysql - Eloquent 中的查询在它不应该起作用时起作用 - 在 MySQL 中,它按预期失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52271862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com