【问题标题】:Delete multiple rows in YII2删除 YII2 中的多行
【发布时间】:2019-12-27 16:15:43
【问题描述】:

我有一个从数据库中获取的对象数组:

$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() 方法我得到了一个错误Call to a member function ... on array。有人可以告诉我哪一个是完成此任务的最佳方法吗?

更新: Here 是我的数据库结构。

【问题讨论】:

    标签: yii2


    【解决方案1】:

    找到更好的解决方案:

    \Yii::$app
        ->db
        ->createCommand()
        ->delete('master_contacts', ['id' => $deletableMasterContacts])
        ->execute();
    

    $deletableMasterContacts 是 master_contacts id 的数组,应该删除

    【讨论】:

    【解决方案2】:

    您可以轻松删除->select('master_list_contacts.*')

    ->innerJoin('master_contacts', '`master_contacts`.`id` = `master_list_contacts`.`master_contact_id`')
    

    执行与->joinWith('masterContact') 相同的工作。

    对于删除实体,请尝试使用以下代码:

    MasterListContacts::deleteAll(['user_id' => \Yii::$app->user->identity->id, 'slug' => $slug]);
    

    【讨论】:

    • 感谢您的回答@Onedev.Link,但它会引发错误:Unknown column 'user_id' in 'where clause' 因为我需要加入表 'master_contacts' 来执行此操作......并且只是想知道 yii提供一种方法来做foreach($masterListContacts as $record) $record->delete();,但查询数据库一次。
    • 是的。您可以使用foreach($masterListContacts as $record) $record->delete(); 代码。 Unknown column 'user_id' in 'where clause' 说表 MasterListContacts::tableName() 没有 user_id 字段。你的数据库结构是什么?如果您只想删除 master_contacts 中的关系记录,则应使用 leftJoin
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2018-12-30
    • 2016-01-13
    • 2017-01-14
    • 2016-02-14
    相关资源
    最近更新 更多