我有使用ActiveRecord-> hasMany()声明的关系
public function getChildren()
{
return $this->hasMany(File::class, ['id' => 'child_file_id'])
->viaTable('file_image_list', ['parent_file_id' => 'id']);
}
我可以获得相关模型,但是我不知道如何删除关系(不是模型)。
Yoi2的口才是associate
还是sync
吗?
我可以做没有循环的$file->children->delete()
之类的事情吗?
答案 0 :(得分:2)
由于有了联结表file_image_list
,并且不想删除File
模型,因此您可能想使用unlinkAll()
类的BaseActiveRecord
方法。
如果仅会使映射表(file_image_list
中的记录无效/销毁,则不必为对象子对象使用循环。
我相信这就是您所需要的:
/** @see File::getChildren() */
$file->unlinkAll('children', true);
请注意unlinkAll(name, delete)
方法具有两个参数:
name-是关系名称。 (我在上面写了@see phpdoc,以便有可能在该关系上找到用法,如果您决定有一天更改/重构)
delete-是否删除联结表中的记录。如果设置为false
,它将仅使该表中的外键无效(因此请确保该列可为空)