Eloquent中的查询在不应该使用时有效-在MySQL中,它按预期失败

时间:2018-09-11 08:33:43

标签: mysql sql laravel eloquent

如果您在MySQL中设置了整数字段,则不允许使用null,默认为null,并且编写了忽略该字段的查询,在Laravel中查询仍然执行,并且不使用null的默认值,而是写为“ 0”。

如果我使用Eloquent / query builder生成的确切查询,并在MySQL中运行它,它将失败,正确地指出所涉及的字段必须具有默认值。

为什么会有这种差异?雄辩的/查询生成器/ 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中做同样的事情。

1 个答案:

答案 0 :(得分:1)

所以我弄清楚发生了什么。 Laravel默认将config / database.php中的严格规则设置为false。这将关闭有关严格模式的各种选项,例如完整的分组bys,严格的trans table等。

我们所做的是在my.cnf上设置STRICT_ALL_TABLES,然后将laravel强制为strict = true。解决了。​​