2016-12-28 112 views
2

我有行,有些行不能刪除,因爲它引用了其他表,另一行可以刪除。如何處理刪除完整性約束違規?

我要的是可以刪除,並留下不能刪除其他行刪除行

到目前爲止我的代碼是

$tkota = TbKota::find()->all(); 
      foreach($tkota as $kota){ 
       if($kota->delete()){ 
        echo "del success<br/>"; 
       }else{ 
        echo "fail ".$kota['api_id']."<br/>"; 
       } 
      } 

我上面的代碼產生此錯誤

SQLSTATE[23503]: Foreign key violation: 7 ERROR: update or delete on table "tb_kota" violates foreign key constraint "fk_tb_produ_reference_tb_kota" on table "tb_produk_ekspedisi_by_vendor" 
    DETAIL: Key (kota_id)=(1771) is still referenced from table "tb_produk_ekspedisi_by_vendor". 
    The SQL being executed was: DELETE FROM "tb_kota" WHERE "kota_id"=1771 

而不是記錄刪除時顯示成功,如果記錄不能刪除則顯示失敗。

我的代碼有什麼問題?

在此先感謝。

+0

使用'try ... catch'。 –

回答

1
foreach($tkota as $kota){ 
    try { 
     if($kota->delete()){ 
      echo "del success<br/>"; 
     } 
    } catch (\Exception $e) { 
     echo "fail ".$kota['api_id']."<br/>"; 
    } 
} 
0

這一次會更好

使用警予\ DB \ IntegrityException;

使用yii \ web \ NotFoundHttpException;

foreach($tkota as $kota){ 

    $connection = \Yii::$app->db; 
    $transaction = $connection->beginTransaction(); 

    try { 
      $kota->delete(); 
      $transaction->commit(); 
      return $this->redirect(['user/view', 'id' => $model->id]); 

     }catch (IntegrityException $e) { 

      $transaction->rollBack(); 
      throw new \yii\web\HttpException(500,"YOUR MESSAGE.", 405); 


     }catch (\Exception $e) { 

      $transaction->rollBack(); 
      throw new \yii\web\HttpException(500,"YOUR MESSAGE", 405); 


    } 

} 
相關問題