删除YII2中的多行
我从数据库中获取了一个对象数组:删除YII2中的多行,yii2,Yii2,我从数据库中获取了一个对象数组: $masterListContacts = MasterListContacts::find() ->select('master_list_contacts.*') ->innerJoin('master_contacts', '`master_contacts`.`id` = `master_list_contacts`.`master_contact_id`')
$masterListContacts = MasterListContacts::find()
->select('master_list_contacts.*')
->innerJoin('master_contacts', '`master_contacts`.`id` = `master_list_contacts`.`master_contact_id`')
->with('masterContact')
->where(['user_id' => \Yii::$app->user->identity->id, 'slug' => $slug])
->all();
在某些情况下,我需要从该数组中表示的数据库中删除所有行。但是使用delete()和deleteAll()方法,我得到了一个对成员函数调用的错误。。。在阵列上
。有人能告诉我哪一个是实现这一目标的最好方法吗
更新:
是我的数据库结构。您可以轻松地删除
->选择('master\u list\u contacts.*')
执行与joinWith('masterContact')相同的工作
对于删除实体,请尝试使用以下代码:
MasterListContacts::deleteAll(['user_id' => \Yii::$app->user->identity->id, 'slug' => $slug]);
找到更好的解决方案:
\Yii::$app
->db
->createCommand()
->delete('master_contacts', ['id' => $deletableMasterContacts])
->execute();
其中,
$deletableMasterContacts
是master_contacts id的数组,应该将其删除谢谢您的回答@Onedev.Link,但它抛出了一个错误:Where子句中的未知列“user_id”
因为我需要加入表“master_contacts”来完成此操作……我只是想知道yii是否提供了一种方法来完成foreach($masterListContacts as$record)$record->delete();
但只需查询一次数据库。是的。您可以使用foreach($masterListContacts as$record)$record->delete();
code.where子句中的未知列“user\u id”
表示该表masterListContacts::tableName()
没有user\u id
字段。您的数据库结构是什么?如果您只想在master\u contacts
中删除带有关系记录的记录,您应该使用leftJoin
。最好使用为此指定的功能。
\Yii::$app
->db
->createCommand()
->delete('master_contacts', ['id' => $deletableMasterContacts])
->execute();