Doctrine 1.2: Comment puis-je éviter une contrainte d'être affecté aux deux côtés d'un à-plusieurs?

StackOverflow https://stackoverflow.com/questions/2623941

Question

Y at-il un moyen d'empêcher la doctrine de l'attribution d'un des deux côtés contraint d'un-à-un? Ive essayé de déplacer la définition d'un côté à l'autre et d'utiliser de posséder côté mais il place encore une contrainte sur les deux tables. quand je veux que la table parent d'avoir une contrainte - à savoir. il est possible pour les parents de ne pas avoir un enfant associé.

Par exemple IWANT le schéma suivant essentiellement sql:

CREATE TABLE `parent_table` (
  `child_id` varchar(50) NOT NULL,
  `id` integer UNSIGNED NOT NULL auto_increment,
  PRIMARY KEY (`id`)
);

CREATE TABLE `child_table` (
  `id` integer UNSIGNED NOT NULL auto_increment,
  `child_id` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`child_id`),
  CONSTRAINT `parent_table_child_id_FK_child_table_child_id`
    FOREIGN KEY (`child_id`)
    REFERENCES `parent_table` (`child_id`)
);

Mais im obtenir quelque chose comme ceci:

CREATE TABLE `parent_table` (
  `child_id` varchar(50) NOT NULL,
  `id` integer UNSIGNED NOT NULL auto_increment,
  PRIMARY KEY (`id`),
  CONSTRAINT `child_table_child_id_FK_parent_table_child_id`
    FOREIGN KEY (`child_id`)
    REFERENCES `child_table` (`child_id`)
);

CREATE TABLE `child_table` (
  `id` integer UNSIGNED NOT NULL auto_increment,
  `child_id` varchar(50) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY (`child_id`),
  CONSTRAINT `parent_table_child_id_FK_child_table_child_id`
    FOREIGN KEY (`child_id`)
    REFERENCES `parent_table` (`child_id`)
);

Je pourrais simplement supprimer la contrainte ou modifier manuellement mes accesseurs pour le retour / définir une seule entité dans la collection (en utilisant un à plusieurs), mais il semble que il devrait y avoir construit de manière à gérer cela.

im également d'utiliser Symfony 1.4.4 (poire installtion ATM) -. Dans le cas où son problème sfDoctrinePlugin et pas nécessairement la doctrine elle-même

Était-ce utile?

La solution

sfDoctrinePlugin configure le modèle de doctrine constructeur d'une façon qui crée des relations latérales opposées automatiquement. En PHP 5.2, vous ne pouvez rien faire avec elle.

PHP 5.3, où la méthode ReflectionProperty::setAccessible() est disponible, vous pouvez manipuler les propriétés protégées / privées d'instance Doctrine_Relation_Parser qui peut être obtenu par $this->getTable()->getRelationParser(). Donc, vous devez remplacer la méthode de BaseSomething::setUp() et déposer les relations non nécessaires manuellement à l'aide de l'API de réflexion de php. Vous devez utiliser l'API de réflexion, car Doctrine_Relation_Parser ne fournit pas une méthode qui permet de déposer des relations à volonté.

Autres conseils

J'ai résolu ce problème en fixant l'état de doctrine pour le contraire « objet null » AVANT nous économisons le dossier:

/* @var $address Address */
$address = $form->getObject();

// the null object is here the "address position", let's change it's state
$address->getAddressPosition()->state(Doctrine_Record::STATE_CLEAN);

// now we can save the address and doctrine won't insert the null object
$address = $form->save();
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top