如果您在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中做同样的事情。
答案 0 :(得分:1)
所以我弄清楚发生了什么。 Laravel默认将config / database.php中的严格规则设置为false。这将关闭有关严格模式的各种选项,例如完整的分组bys,严格的trans table等。
我们所做的是在my.cnf上设置STRICT_ALL_TABLES,然后将laravel强制为strict = true。解决了。