1

DBALException条件の明示的なチェックではなく、検証の実行を使用したいと思います。

たとえば、子レコードが「削除制限」を使用して参照を保持している親レコードを削除すると、整合性制約違反が発生します。これは、mysql pdo ドライバーで Doctrine2 DBAL を使用する MYSQL で最新です。

DBALException をキャッチして (これまでのところ成功)、その場で何が起こったのかを判断できるようにしたいと考えています。

私はコードの解決策を求めているのではなく、エラーを処理して正規化するドクトリンのオプションまたは拡張機能を求めています。簡単な例は次のとおりです。

catch(\Doctrine\DBAL\DBALException $e) {

    if($e->getPrevious()->getCode() == 23000) { // Integrity constraint violation
        /*
         * We know the type of problem; cannot delete parent record, 
         * or cannot create duplicate record.
         * But which one is it? And which child table was complaining?
         */
    }
}

これは PDOException と SQLSTATE エラー コードを使用して問題の概要を把握していますが、十分に具体的ではなく、ODBC に準拠していますが、すべてのデータベースで動作するという保証はありません。

これが必要な理由は、すべての削除手順のすべてのエンティティに対して存在する、または将来存在する可能性のあるすべての参照に対して検証コードを記述できないためです。

自己閉鎖:

これは間違った検証方法であることに気付きました。テスト環境以外ではこの概念を使用しないでください。

4

0 に答える 0