2012-11-21 73 views
0

我這是在用戶我真的開始習慣的用戶和組相關多對一,然後刪除組:多對一主義

DBALException:執行「DELETE FROM 組發生異常WHERE ID = ?使用參數...完整性約束違規: 1451不能刪除或更新父行,外鍵約束 失敗...

DBALException:在執行時發生異常「DELETE FROM 組,其中的id =?」使用參數...完整性約束違規: 1451不能刪除或更新父行,外鍵約束 失敗

... ,這是正常的,我怎麼能抓住異常,或者檢查是否以某種方式使用?

回答

0

這意味着,你可能有你的數據庫設置了外鍵,這樣的:

|---------| 
| User | 
|---------| 
| id  | 
| groupId | 
|---------| 

|-------| 
| Group | 
|-------| 
| id | 
|-------| 

User.groupIdGroup.id。這意味着當您刪除一個組時,您需要定義數據庫應該對該組中的用戶做些什麼。

根據你的意圖,可以改變你的外鍵約束來處理這種情況。你沒有提到你使用的數據庫類型,但我知道在MySQL中你可以有一個CONSTRAINTON DELETE子句,並給它RESTRICT(默認,你現在看到的),CASCADE(刪除所有與該組關聯的用戶)以及​​(爲其組已刪除的用戶設置groupIdNULL)。

0

除了在數據庫級使用ON DELETE子句(這顯然是優雅且與框架無關的方式),您可能希望直接在代碼中檢查組的現有用戶。在這種情況下,您可以執行另一個查詢。

$em = $this->getDoctrine()->getEntityManager(); 

// Set your group id as the desired criterion 
$criteria = array('GroupId' => $group->getId); 

// Get all users that match the criterion 
$users = $em->getRepository("YourBundle:User")->findBy($criteria); 

// Check whether the returned array is empty 
if(count($users) != 0){ 
    // Do your exception handling 
}else { 
    // Do regular operations, like deleting the group 
}