2017-09-04 3 views
0

私は大きなデータベースをインポートします(約350 Mb)。コマンドラインのmysqlを使用してこのデータベースをインポートしようとすると、私はこのエラーがあります:SQLファイルのこの行ではデータベースをインポートするときに外部キーの制約がdoctrineエンティティで失敗する

ERROR 1452 (23000) at line 5118296: Cannot add or update a child row: a foreign key 
constraint fails (`tutotour_tharmobeta1`.`#sql-2039_195b4`, CONSTRAINT 
`FK_D367B678BF396750` FOREIGN KEY (`id`) REFERENCES `reponse` (`id`) ON DELETE CASCADE) 

を、私が持っている次のよう

-- 
-- Contraintes pour la table `reponse` 
-- 
ALTER TABLE `reponse` 
ADD CONSTRAINT `FK_5FB6DEC75DDDBC71` FOREIGN KEY (`error`) REFERENCES 
`errorcsv` (`id`), 
ADD CONSTRAINT `FK_5FB6DEC78D93D649` FOREIGN KEY (`user`) REFERENCES `user` 
(`id`), 
ADD CONSTRAINT `FK_5FB6DEC7D6ADE47F` FOREIGN KEY (`epreuve`) REFERENCES 
`banque_epreuve_temporaire` (`id`), 
ADD CONSTRAINT `FK_5FB6DEC7DCC6487D` FOREIGN KEY (`passage_id`) REFERENCES 
`passer_colle` (`id`); 

-- 
-- Contraintes pour la table `reponse_qc` 
-- 
ALTER TABLE `reponse_qc` 
ADD CONSTRAINT `FK_D367B678B6F7494E` FOREIGN KEY (`question`) REFERENCES 
`qc` (`id`), 
ADD CONSTRAINT `FK_D367B678BF396750` FOREIGN KEY (`id`) REFERENCES `reponse` 
(`id`) ON DELETE CASCADE; 

-- 
-- Contraintes pour la table `reponse_qr` 
-- 
ALTER TABLE `reponse_qr` 
ADD CONSTRAINT `FK_B9D7968A8D5FE0A2` FOREIGN KEY (`idCorrecteur`) REFERENCES 
`tuteur` (`id`), 
ADD CONSTRAINT `FK_B9D7968ABF396750` FOREIGN KEY (`id`) REFERENCES `reponse` 
(`id`) ON DELETE CASCADE, 
ADD CONSTRAINT `reponse_qr_ibfk_2` FOREIGN KEY (`idColle`) REFERENCES 
`colle_qr` (`id`); 

私のエンティティが定義されています。

REPONSEエンティティ:

/** 
* Réponse 
* 
* @ORM\Table("reponse") 
* @ORM\Entity(repositoryClass="PACES\ColleBundle\Repository\ReponseRepository") 
* @ORM\InheritanceType("JOINED") 
* @ORM\DiscriminatorColumn(name="discr", type="string") 
* @ORM\DiscriminatorMap({"reponse"="Reponse", "reponseQC"="ReponseQC", 
"reponseQR"="ReponseQR"}) 
*/ 
class Reponse 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

/** 
* @ORM\ManyToOne(targetEntity="\PACES\UserBundle\Entity\User", inversedBy="reponses", cascade={"persist"}) 
* @ORM\JoinColumn(name="user", referencedColumnName="id", nullable=true) 
*/ 
private $user; 


/** 
* @ORM\ManyToOne(targetEntity="\PACES\ColleBundle\Entity\ErrorCSV", inversedBy="reponses", cascade={"persist"}) 
* @ORM\JoinColumn(name="error", referencedColumnName="id") 
*/ 
private $error; 

/** 
* @var boolean 
* @ORM\Column(name="archive" , type="boolean" , nullable=false, options={"default" = false}) 
*/ 
private $archive; 

/** 
* @ORM\Column(name="banque", type="boolean", options={"default" = false}) 
*/ 
protected $banque; 

/** 
* @var \DateTime 
* 
* @ORM\Column(name="date", type="datetime", nullable=true) 
*/ 
private $date; 

/** 
* @ORM\ManyToOne(targetEntity="PACES\ColleBundle\Entity\PasserColle", inversedBy="reponses", cascade={"persist"}) 
*/ 
private $passage; 

/** 
* @ORM\ManyToOne(targetEntity="PACES\BanqueBundle\Entity\BanqueEpreuveTemporaire", inversedBy="reponses", cascade={"persist"}) 
* @ORM\JoinColumn(name="epreuve", referencedColumnName="id") 
*/ 
private $epreuveTemporaire; 

ReponseQC:

/** 
* ReponseQC 
* 
* @ORM\Table("reponse_qc") 
* @ORM\Entity(repositoryClass="PACES\ColleBundle\Repository\ReponseQCRepository") 
*/ 
class ReponseQC extends Reponse 
{ 
/** 
* @ORM\ManyToOne(targetEntity="QC", inversedBy="reponses", cascade={"persist"}) 
* @ORM\JoinColumn(name="question", referencedColumnName="id") 
*/ 
private $question; 

前回同じデータベースをインポートしたときに、すべてうまく動作していましたが、構造を変更したとは思いません。

答えて

0

このことができ、これに似たもの

$connection = $em->getConnection(); 
$connection->beginTransaction(); 
try { 
    $connection->query('SET FOREIGN_KEY_CHECKS=0'); 
    /* run your query here */ 
    $connection->query('SET FOREIGN_KEY_CHECKS=1'); 
    $connection->commit(); 
} 
catch (\Exception $e) { 
    $connection->rollback(); 
} 

希望をお試しください、

アレクサンドルCosoi

+0

あなたがdownvotesに打た取得する前にあなたは、あなたの答えビットを説明したいかもしれません。 – svgrafov

+0

これは私が最初に考えたものですが、回避策だと思います。それは実際に問題を解決するものではありません...そして、私はコマンドラインmysqlを使ってデータベースを直接インポートしていると言っていませんでした。 –

+0

@svgrafov実行しようとしているクエリは、外部キー制約によってブロックされています。私は完全なデータベースイメージを持っていないので、その制約が何であるか分かりませんが、クエリが正常であれば、クエリを実行するまでこのタイプの制約のチェックを停止するようにmysqlに指示できます。 $ connection-> query( 'SET FOREIGN_KEY_CHECKS = 0')を呼び出して、クエリを実行する前にまた、$ connection-> query( 'SET FOREIGN_KEY_CHECKS = 1')でそのチェックをオンにします。これが役に立たないと思っていて、助けようとすると、下の投票が必要です。 –

関連する問題