symfony CLI λͺ λ Ήμ νΈμΆν λ:
php app/console doctrine:fixtures:load
λλ μ»λ€
[PDOException]
SQLSTATE[42000]: Syntax error or access violation: 1701 Cannot truncate a table referenced in a foreign key constraint (symfony.param_product, CONSTRAINT param_product_ibfk_1 FOREIGN KEY (param_val_id) REFERENCES symfony.param_value (id))
symfony.param_product ν μ΄λΈμ @ORM\JoinTable μ£Όμ(@ORM\ManyToMany ν¬ν¨)μ μν΄ μμ±λ©λλ€. λλ MySQLμ μ¬μ©νκ³ μμ΅λλ€
μ΄κ²μ μ΄ λ³κ²½ μ μ μ μλνμ΅λλ€: 91ff6ebbb781441c60782d90a4dd95482eeedf35
λ΄ μͺ½μ λ²κ·ΈμΌ μ μλ€κ³ μκ°νμ§λ§(μ: onDelete μ΅μ μμ) μλν λͺ¨λ κ²μ΄ μ€ν¨νμ΅λλ€.
λ΄κ° μλ₯Ό λ€μ΄ http://forums.asp.net/t/1283840.aspx/1?How+can+I+truncate+the+table+which+have+foreign+key+ μμ λ°°μ΄ ν
ON DELETE CASCADE is true only for deleting records and not for truncating tables.
You have to drop the foreign key constraint from Child Table that references the Master Table to be truncated, then after only you are able to truncate the Master Table.
λ°λΌμ μ μΌν ν΄κ²°μ± μ DELETEλ₯Ό μ¬μ©νκ±°λ λ¨Όμ μμ ν€λ₯Ό μμ νλ κ²μ λλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ 91ff6ebbb781441c60782d90a4dd95482eeedf35 λ³κ²½ μ¬νμ λλ릴 μ μμ΅λκΉ? @λ² λ² λ₯Όλ μ΄?
DELETE
λ₯Ό μ¬μ©ν λμ λ¬Έμ λ μλ μ¦κ° κ°μ μ¬μ€μ νμ§ μλλ€λ κ²μ
λλ€.
μ’μ΅λλ€. νμ§λ§ TRUNCATE
μ λ¬Έμ λ κ΅λ¦¬: κ³ μ μ₯μΉ :load λͺ
λ Ήμ΄ μλνμ§ μλλ€λ κ²μ
λλ€.
μ λ§ νμν κ²½μ°, μλ₯Ό λ€μ΄ ν μ΄λΈμ μμ νκ³ λ€μ λ§λλ κ²κ³Ό κ°μ΄ μλ μ¦λΆμ 1μμ μμνλ κ²μ νμ μνν μ μμ΅λλ€. κ·Έλ μ£ ?
μ - λλμ΄ λ¬Έμ κ° μμ΅λλ€. μ§κΈμ 91ff6ebbb781441c60782d90a4dd95482eeedf35λ‘ λ‘€λ°±ν©λλ€.
91ff6ebbb781441c60782d90a4dd95482eeedf35 λλ리기 +1
TRUNCATEμ 'CASCADE'λ₯Ό μΆκ°νμ§ μλ μ΄μ λ 무μμ λκΉ? $platform->getTruncateTableSQL($tbl)μλ 'TRUNCATE table CASCADE'(μ μ΄λ postgresμ κ²½μ°)μ κ°μ κ²μ λ°ννλ λ λ²μ§Έ 맀κ°λ³μκ° μμΌλ©° μλν©λλ€.
ν 리νμ€νΈλ₯Ό μΆκ°νλ κ²μ μ΄λ»μ΅λκΉ? κ·Έλ¬λ©΄ λ³ν©ν μ μμ΅λλ€.
@leahaense
λ¬Έμ λ MySQLμ μ¬μ©ν λ μ¬μ ν μ‘΄μ¬ν©λλ€(4a8464ef83093de2378cef2770e13da7e4858ffc μ΄νμλ).
μ΄ κ²½μ° μΈλ ν€κ° μλ°©ν₯μ λκΉ?
@beberlei λ€ κ·Έλ κ² μκ°ν©λλ€. SQLμ΄ μΌλλ€/λ€λλ€ μ£Όμ(μ: μλ°©ν₯)μμ Doctrineμ μν΄ μμ±λκΈ° λλ¬Έμ 100% νμ ν μ μμ΅λλ€.
λ€λ₯Έ μ¬λμ΄ MySQLμμ μ΄ λ¬Έμ λ₯Ό κ²ͺκ³ μμ΅λκΉ? μλλ©΄ μ λ§ κ·Έλ°κ°μ?
TRUNCATE μ μ foreign_key_checks=0 μ μνν μ μμ΅λκΉ?
http://bugs.mysql.com/bug.php?id=58788
λλ λνμ΄ λ¬Έμ λ₯Ό μΉκ³ μλ€.
λλ λ΄ ννΈλμ λκ°μ λ¬Έμ λ‘ μ€ννμ΅λλ€. μ΄κ²μ MySQL 5.5μμ λ°μνμ§λ§ 5.1μ μΈλ ν€λ‘ ν μ΄λΈμ μλ₯΄λ λ° λ¬Έμ κ° μμ΅λλ€. DELETEλ‘ λλ리λ κ²μ auto_increment ν€κ° μ¬μ€μ λμ§ μμ μνμμ μμμ μ€λͺ ν κ²μ²λΌ μ°μν μ루μ μ΄ μλλλ€.
mysql 5.5μ λν΄ foreign_key_checks=0κ³Ό κ°μ μμ μ¬νμ΄ μμΌλ©΄ μ’μ κ²μ λλ€.
λ€μμ MySQL 5.5μμ μλνλλ‘ νκΈ° μν λΉ λ₯Έ λλ¬μ΄ ν΄νΉμ λλ€.
diff --git a/lib/Doctrine/Common/DataFixtures/Purger/ORMPurger.php b/lib/Doctrine/Common/DataFixtures/Purger/ORMPurger.php
index a580c1f..ff758c1 100644
--- a/lib/Doctrine/Common/DataFixtures/Purger/ORMPurger.php
+++ b/lib/Doctrine/Common/DataFixtures/Purger/ORMPurger.php
@@ -82,10 +82,12 @@ class ORMPurger implements PurgerInterface
$orderedTables[] = $class->getTableName();
}
+ $this->em->getConnection()->executeUpdate("SET foreign_key_checks = 0;");
$platform = $this->em->getConnection()->getDatabasePlatform();
foreach($orderedTables as $tbl) {
$this->em->getConnection()->executeUpdate($platform->getTruncateTableSQL($tbl, true));
}
+ $this->em->getConnection()->executeUpdate("SET foreign_key_checks = 1;");
}
private function getCommitOrder(EntityManager $em, array $classes)
μμ μμ μ¬νμ μ μκ² ν¨κ³Όμ μ λλ€. νμ μλμΌλ‘ λ³κ²½ν νμκ° μλλ‘ repoμ μμ μ¬νμ λμ ν μ μλ μμ΄λμ΄κ° μμ΅λκΉ?
λν λ²λ€μ μ¬μ©νλ €λ©΄ μ΄ μμ μ¬νμ μΆκ°ν΄μΌ νμ΅λλ€.
μμ λ΄μ©μ λλ₯Ό μν΄ μμ λμμ΅λλ€(λ΄κ° λ§ν μ μλ ν, μ¬μ ν Doctrine/Symfony2λ₯Ό λ°°μ°κ³ μμ)
λ΄κ° λ§λ foreign_key_checks
@mdarse κ·Έμ ν μμ²μ μ μΆ μμ²΄κ° λͺ λΆ νμ DBAL νλ‘μ νΈμ MySqlPlatformμ λ³κ²½ :
λ΄ μ»΄ν¨ν°μμ MySQL 5.5.9μ κ°μ λ¬Έμ κ° λ°μνμ§λ§ dogbrainμ ν΄νΉμ΄ λμμ΄ λμμ΅λλ€.
μ΄ μμ μ¬νμ ν΅ν©ν μ μμ΅λκΉ? κ·Έλ μ§ μμΌλ©΄ λͺ¨λ μ¬λμ΄ νμ μλμΌλ‘ μΆκ°ν΄μΌ μλν©λλ€.
"μμ "μ΄ μλλΌ ν΄νΉμ λλ€. λλ ν΄νΉμ λ³ν©νμ§ μμ κ²μ λλ€.
μ’μ... μΆ©λΆν 곡μ ν΄. κ·Έλ¬λ κ³ μ μ₯μΉκ° μλνλλ‘ νμ©νλ ν΄νΉμ΄λ©° μλνλ©΄ μ’μ κ²μ
λλ€ ;)
λ³ν©ν μ μλ κ²½μ° μμ ν μ μμ΅λκΉ? κ·Έλ μ§ μμΌλ©΄ λ§μ μ¬λλ€μ΄ μ΄ λ²λ€μ μ¬μ©ν μ μκ² λ§λλ λ²κ·Έκ° μμ΅λλ€(μ
λ°μ΄νΈκ° λ§λ€μ΄μ§ λλ§λ€ μ½λλ₯Ό μ§μμ μΌλ‘ μλμΌλ‘ ν΄νΉνμ§ μκ³ ).
@λ² λ² λ₯Όλ μ΄?
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ 91ff6eb λ³κ²½μ λλ릴 μ μμ΅λκΉ?
μ΄λ κ²νλ©΄ ν΄νΉμ΄λμ§ μμ΅λλ€. μ΄ λ¬Έμ μ 첫 λ²μ§Έ κ²μλ¬Όμμ μ μλμμ΅λλ€.
λ΄κ° μ λλ‘νκ³ μλμ§ νμ€νμ§ μμ§λ§ κ°μ λ¬Έμ κ° μμ΅λλ€. μ¬μ© μ€μΈ λ²μ μ μ μ μμ΅λλ€. Composerλ‘ λ€μ΄λ‘λνμ΅λλ€.
"require": {
"doctrine/doctrine-fixtures-bundle": "dev-master"
},
μ΄μ¨λ μΈλ±μ€ μ¬μ€μ μ μ»μΌλ €λ©΄ λ€μ λ‘λνκΈ° μ μ " κ΅λ¦¬:μ€ν€λ§ :drop --force"λ₯Ό μ€νν λ€μ " κ΅λ¦¬:μ€ν€λ§ :update --force"λ₯Ό μ€νν΄μΌ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ κ°μ μ€λ₯κ° μμ΅λλ€. λκ΅°κ° λ΄κ° λ μλͺ»νκ³ μλμ§ λ§ν΄ μ€ μ μμ΅λκΉ?
미리 κ°μ¬λ립λλ€.
μ΅μ λ²μ μ κ΅λ¦¬ κ³ μ μ₯μΉμ Mysql 5.5λ₯Ό μ€ννλ κ²κ³Ό λμΌν λ¬Έμ κ° μμ΅λλ€. "ν΄νΉ"μ΄ μλνμ§λ§ μ΄μ κ°λ₯ν μ루μ μ΄ μλλλ€. μ€ν€λ§λ₯Ό μμ νκ³ λ§€λ² λ€μ λ§λ€μ΄μΌ ν©λλ€.
μμ μκ² νΈμλ₯Ό λ² νκ³ load_fixtures
μ κ°μ΄ Symfony ν΄λ μμ μ€ν¬λ¦½νΈλ₯Ό λ§λμμμ€.
bin/console doc:sc:drop --force
bin/console doc:sc:cr
bin/console doc:fix:lo --no-interaction
chmod 755 load_fixtures
λ₯Ό μ€νν λ€μ ./load_fixtures.
κ°μ₯ μ μ©ν λκΈ
λ€μμ MySQL 5.5μμ μλνλλ‘ νκΈ° μν λΉ λ₯Έ λλ¬μ΄ ν΄νΉμ λλ€.