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-多对多)。你试过了吗?它的行为如何?