我在使用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
,CONSTRAINTdatapoints_sensor_id_foreign
FOREIGN KEY (sensor_id
) REFERENCESalerting
.sensors
(id
))
(sql: truncatesensors
)
如果顺序是反向的(首先删除传感器),我会理解这个约束,但是当数据点为空时,删除传感器应该没有问题吗?我也尝试过:
DB::table('datapoints')->delete(); DB::table('sensors')->delete(); return 'Done...';
最后我还尝试在delete语句之间显式添加’DB :: commit()’,但都返回相同的结果.
这是正常的行为吗?我错过了什么吗?
提前致谢.
干杯,
韦斯利
不,这是数据库的工作方式.您不能截断某些其他表引用的表.你可以做点什么
原文链接:https://www.f2er.com/laravel/135111.htmlDB::statement('SET FOREIGN_KEY_CHECKS=0;'); DB::table('datapoints')->truncate(); DB::table('sensors')->truncate(); DB::statement('SET FOREIGN_KEY_CHECKS=1;');
禁用外键检查,截断表并再次启用它.