在 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