在 ThinkPHP 中模型关联删除官方文档只提到了主子表数据一起删除的方法。
即使用together方法,但在不删除主表只删除子表的时候遇到问题了。
正常执行(TP5)
以下代码在 TP 5.0.24 中是可以正常删除子表数据的:
<?php
namespace app\index\controller;
use app\common\model\Article;
class Index
{
public function index()
{
$data = Article::get(1, ['image']);
$data->image()->delete();
return json($data);
}
}
问题代码(TP6)
而到了 TP 6 代码有点变化,但基本是一样的操作,却会报错:
没有条件不会执行删除操作
<?php
namespace app\controller;
use app\BaseController;
use app\model\Article;
class Index extends BaseController
{
public function index()
{
$data = Article::with(['image'])->find(1);
$data->image()->delete();
return json($data);
}
}
报错详情

解决方案
说实话我认为这是 bug,临时我的方案是
$data->image->delete();
参考链接
TP官网讨论:http://www.thinkphp.cn/topic/68775.html
在ThinkPHP6中,尝试仅删除子表数据而不影响主表时遇到问题。本文介绍了一个在TP5中有效的子表删除方法,并指出在TP6中此方法因未提供条件而失败。提供了一个临时解决方案。
238

被折叠的 条评论
为什么被折叠?



