微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – Laravel Eloquent truncate – 外键约束

我在使用Laravel 5删除数据时遇到了一些问题.我似乎陷入了“外键约束”,但我不明白为什么.

在我当前的数据库模型中,我有一个datapoints表,它有一个传感器表的外键(datapoints.sensors_id – > sensor.id).

我正在尝试的代码

Route::get('/truncateData',function() {
DB::table('datapoints')->truncate();
DB::table('sensors')->truncate();
return 'Done...';

});

结果:

sqlSTATE[42000]: Syntax error or access violation: 1701 Cannot
truncate a table referenced in a foreign key constraint
(alerting.datapoints,CONSTRAINT datapoints_sensor_id_foreign
FOREIGN KEY (sensor_id) REFERENCES alerting.sensors (id))
(sql: truncate sensors)

如果顺序是反向的(首先删除传感器),我会理解这个约束,但是当数据点为空时,删除传感器应该没有问题吗?我也尝试过:

DB::table('datapoints')->delete();
DB::table('sensors')->delete();
return 'Done...';

最后我还尝试在delete语句之间显式添加’DB :: commit()’,但都返回相同的结果.

这是正常的行为吗?我错过了什么吗?

提前致谢.

干杯,

韦斯利

不,这是数据库的工作方式.您不能截断某些其他表引用的表.你可以做点什么
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
DB::table('datapoints')->truncate();
DB::table('sensors')->truncate();
DB::statement('SET FOREIGN_KEY_CHECKS=1;');

禁用外键检查,截断表并再次启用它.

原文地址:https://www.jb51.cc/laravel/135111.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。