2015-11-25 69 views
1

我需要一種方法來動態創建關係,我選擇啓動學說的事件時加載類的元數據,loadClassMetadata()主義動態關係不起作用

public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) 
{ 
    $metadata = $eventArgs->getClassMetadata(); 

    $this->em = $eventArgs->getEntityManager(); 
    if ($metadata->getName() != 'AppBundle\Entity\NewsNews') { 
     return; 
    } 
    $attachmentsMetadata = $this->getAttachmentsClassMetadata(); 

    $attachmentsMetadata->mapManyToOne(
     [ 
      "targetEntity" => $metadata->getName(), 
      "fieldName" => "newsNews", 
      'joinColumns' => array(
       array(
        'name' => 'foreign_key', 
        'referencedColumnName' => 'id' 
       ) 
      ), 
      "inversedBy" => "attachments" 
     ] 
    ); 
    $attachmentsMetadata->initializeReflection(); 

    $metadata->mapOneToMany(
     [ 
      "targetEntity" => $attachmentsMetadata->getName(), 
      "fieldName" => "attachments", 
      'joinColumns' => array(
       array(
        'name' => 'id', 
        'referencedColumnName' => 'foreign_key' 
       ) 
      ), 
      "mappedBy" => "newsNews" 
     ] 
    ); 
} 

好,工作,但問題是,當教條將設置數據爲這種關係,他拋出這個異常「注意:未定義的指數:newsNews」 我已經檢查了類,當學說將附加此數據和newsNews字段丟失反射特性。 如果我忘記了這個過程中的某些部分,我不知道的xD

感謝您的幫助

+0

我不能完全肯定,爲什麼你會需要這個,此外什麼是這種「動態」代碼的目的是什麼? – tftd

+0

我想自動創建自己的應用程序關係,而無需更改包。謝謝 –

回答

1

映射並不意味着在運行時被改變,你提出的解決方案更多的是劈主義的和,而它可以工作,它可能會導致你一路上更多的黑客。

如果您的限制是您不想修改Attachment映射,您可以使用與已加入的表進行一對多關聯。

這樣,您只需要映射一對多的反面。但是,您只能以這種方式導航。

文檔:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-to-many-unidirectional-with-join-table