Lehre 1.2: Wie verhindere ich eine Einschränkung von zu beiden Seiten einer Beziehung One-to-many zugewiesen werden?

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

Frage

Gibt es eine Möglichkeit Lehre zu verhindern, dass ein contraint von Zuordnung auf beiden Seiten einer Eins-zu-Eins-Beziehung? Ive versucht, die Definition von einer Seite zur anderen bewegt und mit Seiten besitzen, aber es stellt immer noch eine Einschränkung auf beiden Tabellen. wenn ich will nur die übergeordnete Tabelle eine Einschränkung haben - dh. ihr möglich, dass die Eltern nicht ein zugehöriges Kind hat.

Zum Beispiel iwant das folgende SQL-Schema im Wesentlichen:

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`)
);

Doch im immer so etwas wie folgt aus:

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`)
);

Ich konnte nur die Einschränkung manuell entfernen oder meine Accessoren Rückkehr / set eine Einheit in der Sammlung ändern (ein Eins-zu-viele mit), aber es scheint, wie es in Art und Weise gebaut soll dies zu handhaben.

Im auch mit Symfony 1.4.4 (Birne install ATM) -. Bei seinem einem sfDoctrinePlugin Problem und nicht unbedingt Lehre selbst

War es hilfreich?

Lösung

sfDoctrinePlugin konfiguriert Lehre Modellbauer in Art und Weise, die automatisch entgegengesetzte Seite Beziehungen schafft. In 5.2 PHP kann man nichts damit tun.

Ab PHP 5.3, wo ReflectionProperty::setAccessible() Methode verfügbar ist, Sie private protected / manipulieren Eigenschaften von Doctrine_Relation_Parser Instanz, die durch $this->getTable()->getRelationParser() erhalten werden kann. So müssen Sie BaseSomething::setUp() Methode außer Kraft setzen und manuell nicht benötigte Beziehungen fallen php Reflexion API. Sie haben Reflection-API zu verwenden, da Doctrine_Relation_Parser keine Methode bietet, die Beziehungen nach Belieben fallen können.

Andere Tipps

Ich habe dieses Problem gelöst durch die Lehre Zustand für das Gegenteil „Null-Objekt“ Einstellung VOR Wir speichern den Datensatz:

/* @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();
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top