2016-11-25 95 views
0

我需要刪除agency_permissions中的所有記錄,其中它的模塊類型位於permissions表內,是1。如何在Yii2中實現它,有些類似於deleteAll()->joinWith(),而不是使用直接的sql刪除命令。尋找實現這一任務的Yii2方式。下面是表:如何刪除與其他表具有外鍵關係的所有()記錄

權限

+-----+-----------------------------------------------+-------------+ 
| id | title           | module_type | 
+-----+-----------------------------------------------+-------------+ 
| 134 | Case/Container        |   1 | 
| 141 | Container > Status       |   1 | 
| 146 | Container > Topic/Sub-topic     |   1 | 
| 150 | Container > Facility/ Sub-facility   |   1 | 
| 275 | Allow other cities to compare with this city? |   0 | 
| 276 | Activate Outlook Module (choose yes)   |   0 | 
+-----+-----------------------------------------------+-------------+ 

agency_permissions

+----+---------+---------------+ 
| id | govt_id | permission_id | 
+----+---------+---------------+ 
| 1 |  22 |   134 | 
| 2 |  22 |   141 | 
| 3 |  22 |   146 | 
| 4 |  22 |   150 | 
| 5 |  22 |   275 | 
| 6 |  22 |   276 | 
+----+---------+---------------+ 

回答

1

如果你有兩個Permissions.phpAgencyPermissions.php型號或類似的,你可以做這樣的事情:

$permissions = Permissions::find() 
    ->select('id') 
    ->asArray() 
    ->where(['module_type' => 1]) 
    ->all(); 

$permissionsIds = ArrayHelper::getColumn($permissions, 'id'); 

$rowsDeleted = AgencyPermissions::deleteAll(['permission_id' => $permissionsIds]); 
+0

所以沒有像這樣的東西: - > deleteAll() - > joinWith('permissions') - > wher e(['permission_id'= $ permissionsIds]); , 對? – Vipul

+1

不是我在ActiveRecord的文檔中看到的。 – marche

相關問題