Activerecord Yii2通过连接表取消记录链接

Activerecord Yii2通过连接表取消记录链接,activerecord,yii2,Activerecord,Yii2,我有两个模型;用户和抽奖。我还有一个连接表,其中只有一个id、一个user\u id、一个raffle\u id 然后,我从用户模型中获得如下莱佛士: public function getRaffles() { return $this->hasMany(Raffle::class, ['id' => 'raffle_id']) ->viaTable('raffle_user', ['user_id' => 'id']); } public f

我有两个模型;用户和抽奖。我还有一个连接表,其中只有一个
id
、一个
user\u id
、一个
raffle\u id

然后,我从用户模型中获得如下莱佛士:

public function getRaffles()
{
    return $this->hasMany(Raffle::class, ['id' => 'raffle_id'])
        ->viaTable('raffle_user', ['user_id' => 'id']);
}
public function getUsers()
{
    return $this->hasMany(User::class, ['id' => 'user_id'])
        ->viaTable('raffle_user', ['raffle_id' => 'id']);
}
根据莱佛士的模型,如下所示:

public function getRaffles()
{
    return $this->hasMany(Raffle::class, ['id' => 'raffle_id'])
        ->viaTable('raffle_user', ['user_id' => 'id']);
}
public function getUsers()
{
    return $this->hasMany(User::class, ['id' => 'user_id'])
        ->viaTable('raffle_user', ['raffle_id' => 'id']);
}
这很有效,我可以成功地调用
$user->link('raffles',$raffle)

但是,当我尝试取消链接一个记录时,比如
$user->unlink('raffles',$raffle)我得到错误:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'raffle_id' cannot be null
我是做错了什么,还是有什么配置错误?

下面是这样说的

默认情况下,unlink()方法将设置 将现有关系指定为空。然而,你可以选择 通过传递删除包含外键值的表行 $delete参数与方法相同

那么,您的列
raffle\u id
是否定义为非空?这可以解释这种情况

您应该将
true
作为第三个属性传递,或者在列上设置
notnull


顺便说一句,它应该使用相同的关系。为什么在
链接时有
莱佛士
,在
取消链接时有
莱佛士

莱佛士/莱佛士是一个打字错误。他们都是莱佛士。至于取消链接,传递true是否也会删除外来对象?所以
$user->unlink('raffles',$raffle,true)是否会删除抽奖?就我阅读文档而言,这就是文档听起来的样子-将第三个属性设置为
true
应该会删除联接表中的行(raffle_user-多对多)。你试过了吗?它的行为如何?