Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除YII2中的多行_Yii2 - Fatal编程技术网

删除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();