2015-11-24 18 views
5

Tôi có một mảng các đối tượng lấy từ cơ sở dữ liệu:Xóa nhiều hàng trong YII2

$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(); 

Theo một số trường hợp tôi cần phải xóa tất cả các hàng từ cơ sở dữ liệu đại diện trong mảng này. Nhưng với cả hai phương thức xóa xóa()deleteAll() Tôi gặp lỗi Call to a member function ... on array. Ai đó có thể nói với tôi xin vui lòng một trong những cách tốt nhất để thực hiện điều này.

CẬP NHẬT: Here là cấu trúc cơ sở dữ liệu của tôi.

Trả lời

8

giải pháp Tìm thấy tốt hơn:

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

đâu $deletableMasterContacts là mảng của master_contacts id, cần được xóa

6

Bạn có thể dễ dàng xóa ->select('master_list_contacts.*').

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

thực hiện cùng công việc ->joinWith('masterContact').

Đối entites xóa thử sử dụng mã này:

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

Cảm ơn bạn đã trả lời của bạn @ Onedev.Link, nhưng nó ném một lỗi: 'cột không xác định 'user_id' trong 'where khoản'' kể từ khi tôi cần phải tham gia bảng' master_contacts 'để làm điều này ...... và chỉ cần tự hỏi không yii cung cấp một cách để làm 'foreach ($ masterListContacts dưới dạng $ record) $ record-> delete();' nhưng truy vấn cơ sở dữ liệu một lần. –

+0

Vâng. Bạn có thể sử dụng 'foreach ($ masterListContacts như $ record) $ record-> delete();' code. 'Cột không xác định 'user_id' trong 'where clause'' nói rằng bảng' MasterListContacts :: tableName() 'does't có trường' user_id'. Cấu trúc cơ sở dữ liệu của bạn là gì? Nếu bạn muốn xóa các bản ghi chỉ với bản ghi quan hệ trong 'master_contacts', bạn nên sử dụng' leftJoin'. –

Các vấn đề liên quan