如何删除yii2(数据透视表)中的多对多关系

时间:2019-04-22 14:05:38

标签: eloquent yii2

我有使用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()之类的事情吗?

1 个答案:

答案 0 :(得分:2)

由于有了联结表file_image_list,并且不想删除File模型,因此您可能想使用unlinkAll()类的BaseActiveRecord方法。 如果仅会使映射表(file_image_list中的记录无效/销毁,则不必为对象子对象使用循环。

我相信这就是您所需要的:

/** @see File::getChildren() */
$file->unlinkAll('children', true);

请注意unlinkAll(name, delete)方法具有两个参数:

  1. name-是关系名称。 (我在上面写了@see phpdoc,以便有可能在该关系上找到用法,如果您决定有一天更改/重构)

  2. delete-是否删除联结表中的记录。如果设置为false,它将仅使该表中的外键无效(因此请确保该列可为空)