Какая польза от установки доктрины в отношениях «многие ко многим»? - PullRequest
3 голосов
/ 15 апреля 2011

Сегодня я встретил неожиданное поведение в учении (1.2).

Положение

У меня есть Document класс и Anomaly класс. Document может иметь множество Anomalies, а Anomaly можно найти на многих Documents.

#schema.yml

Document:
  columns:
    id:       { type: integer(12), primary: true, autoincrement: true }
    scan_id:  { type: integer(10), notnull: true }
    name:     { type: string(100), notnull: true }

Anomaly:
  columns:
    id:     { type: integer(5), primary: true, autoincrement: true }
    label:  { type: string(200) }
    value:  { type: integer(6), notnull: true, unique: true }
  relations:
    Documents:
      class:        Document
      refClass:     DocumentAnomaly
      local:        anomaly_id
      foreign:      document_id
      foreignAlias: Anomalies

DocumentAnomaly:
  columns:
    document_id:  { type: integer(12), primary: true }
    anomaly_id:   { type: integer(5), primary: true }
  relations:
    Anomaly:  { local: anomaly_id, foreign: id }
    Document: { local: document_id, foreign: id }

Задача

Я хочу создать новый экземпляр Document, присвоить его атрибутам какое-либо значение и назначить ему список Anomaly.

#sample code

$anomalies = Doctrine_Core::getTable('Anomaly')->getSomeAnomalies(); //returns a valid and non empty Doctrine_Collection of Anomalies

$document = new Document();
$document->setName('test')
  ->setScanId(3574)
  ->setAnomalies($anomalies)
  ->save();

echo $document->getId(); // "1"
print_r($document->getDocumentAnomaly()->toArray(); // empty array
print_r($document->getAnomalies()->toArray(); //correct array, listing anomalies from "->getSomeAnomalies()"

Последствия: Document сохраняется в базе данных, но не ссылка на ее Anomalies (DocumentAnomaly таблица / объекты).

Обход

$anomalies = Doctrine_Core::getTable('Anomaly')->getSomeAnomalies();

$document = new Document();
$document->setName('test')
  ->setScanId(3574)
  ->setAnomalies($anomalies)
  ->save();

foreach ($anomalies as $anomaly)
{
  $documentAnomaly = new DocumentAnomaly();
  $documentAnomaly->setDocument($document)
    ->setAnomaly($anomaly);
  $documentAnomaly->save();
}

//Document is persisted, *and it's DocumentAnomalies too*.

Мой вопрос

Какая польза от метода $document->setAnomalies()? Есть ли ? Я что-то упустил?

Спасибо.

1 Ответ

1 голос
/ 15 апреля 2011

$ Document-> Anomalies-> добавить ($ аномалию);

...