如何在yii2中使用join删除数据
我使用以下查询删除所有与给定id我的代码相关的对应数据:如何在yii2中使用join删除数据,yii2,Yii2,我使用以下查询删除所有与给定id我的代码相关的对应数据: public function actionDeletebyajax() { $pid = $_POST['id']; if($pid) { $this->findModel($pid)->delete(); Profile::deleteAll('user_id ='.$pid); UserLoyalty::deleteAll('store_id ='
public function actionDeletebyajax()
{
$pid = $_POST['id'];
if($pid) {
$this->findModel($pid)->delete();
Profile::deleteAll('user_id ='.$pid);
UserLoyalty::deleteAll('store_id ='.$pid);
Workorderpopup::deleteAll('workorder_id ='.$pid);
Deal::deleteAll('workorder_id ='.$pid);
WorkorderCategory::deleteAll('workorder_id ='.$pid);
store::deleteAll('owner ='.$pid);
workorders::deleteAll('workorder_id ='.$pid);
echo $pid; exit;
}
}
但是这里我想要的
Workorderpopup
有一个子表Workorderpopup\u child
我想要删除所有的子记录,但是子表与$pid
没有任何关系也有办法删除子记录吗?假设这个关系是Workorderpopup\u child.Workorderpopup\u id
>workorderpopup.id
可能是这样的
条件中的级联删除
$workorderpopups = Workorderpopup::find()
->select('id')
->where(['workorder_id' => $pid])
->asArray()->all();
Workorderpopup_child::deleteAll(['in', 'workorderpopup_id', array_values($workorderpopups)]);
或者像这样:
按关系取消链接级联删除
$workorderpopups = Workorderpopup::find()
->select('id')
->where(['workorder_id' => $pid])
->asArray()->all();
foreach ($workorderpopups as $workorderpopup) {
$workorderpopup->delete();
}
然后覆盖您的Workorderpopup->delete()
,如下所示
/**
* @inheritdoc
*/
public function delete()
{
$this->unlinkAll('workorderpopup_child', true);
return parent::delete();
}
并确保您在workorderpopup
类中具有相应的关系workorderpopup\u child
:
/**
* @return \yii\db\ActiveQuery
*/
public function getWorkorderpopup_child()
{
return $this->hasMany(Workorderpopup_child::className(), ['workorderpopup_id' => 'id']);
}
p、 我还没有测试上面的代码,所以假设关系是
workorderpopup\u child.workorderpopup\u id
->workorderpopup.id
,这里可能会有一些错误
可能是这样的
条件中的级联删除
$workorderpopups = Workorderpopup::find()
->select('id')
->where(['workorder_id' => $pid])
->asArray()->all();
Workorderpopup_child::deleteAll(['in', 'workorderpopup_id', array_values($workorderpopups)]);
或者像这样:
按关系取消链接级联删除
$workorderpopups = Workorderpopup::find()
->select('id')
->where(['workorder_id' => $pid])
->asArray()->all();
foreach ($workorderpopups as $workorderpopup) {
$workorderpopup->delete();
}
然后覆盖您的Workorderpopup->delete()
,如下所示
/**
* @inheritdoc
*/
public function delete()
{
$this->unlinkAll('workorderpopup_child', true);
return parent::delete();
}
并确保您在workorderpopup
类中具有相应的关系workorderpopup\u child
:
/**
* @return \yii\db\ActiveQuery
*/
public function getWorkorderpopup_child()
{
return $this->hasMany(Workorderpopup_child::className(), ['workorderpopup_id' => 'id']);
}
p、 我还没有测试上面的代码,所以这里可能有一些错误,但它与
Workorderpopup
有关。您可以查找并删除它们,然后删除Workorderpopup
。在数据库中的级联删除上定义关系,或定义触发器方法,如beforeDelete(),但它与Workorderpopup
有关系。您可以找到并删除它们,然后删除Workorderpopup
。在数据库中定义级联删除上的关系或定义触发器方法,如beforeDelete()