2016-04-26 12 views
8

Sto tentando di avere un tratto Filable che fornirà un'entità con metodi ai file CRUD basati sull'entità file menzionata di seguito.Uso di Doctrine e Symfony per creare associazioni simili a polimorfismi

Dopo aver letto la documentazione su Doctrine e la ricerca su Internet, il meglio che ho trovato è Inheritance Mapping ma questi richiedono la sottoclasse per estendere la superclasse che non è l'ideale poiché le Entità correnti estendono già altre classi. Potrei avere l'entità FileFoo e un'entità FileBar ma questo diventa troppo disordinato e richiede un join aggiuntivo (super ->sub ->entity).

alternativa, ho potuto avere un Entity file che ha molte colonne per Entità (così foo_id per l'oggetto Foo, bar_id per l'oggetto bar e così via), ma questo diventa disordinato e richiederebbe una nuova colonna per ogni entità che Vorrei anche aggiungere il tratto Filable.

Quindi alle domande: Sto pensando a come voglio mantenere i dati in modo errato? Ci sono alcune funzioni/funzioni in Doctrine/Symfony che ho perso? Pensi che una funzione come questa sarebbe stata aggiunta se avessi forgiato Doctrine per aggiungere questa funzione, anche dove dovrei apparire?

<?php 
/** 
* File 
* 
* @ORM\Table() 
* @ORM\Entity() 
* @ORM\HasLifecycleCallbacks() 
*/ 
class File 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(type="integer") 
    * @ORM\Id() 
    * @ORM\GeneratedValue() 
    */ 
    protected $id; 
    /** 
    * @var string 
    * 
    * @ORM\Column(type="string") 
    */ 
    protected $entityName; 
    /** 
    * @var string 
    * 
    * @ORM\Column(type="string") 
    */ 
    protected $entityId; 
... 
+1

Hai davvero bisogno del lato inverso della relazione Entità -> File? Poiché in uno dei miei progetti ho un'interfaccia 'FileableInterface', e dato che non ho dovuto accedere a' Entity' dal 'File', ho evitato qualsiasi configurazione complicata di Doctrine. Quindi tutto dipende da quello che ti serve, ma se non hai bisogno di usare '$ file-> getEntity()', definire solo il lato proprietario della relazione potrebbe essere sufficiente. – Terenoth

risposta

1

ho realizzato una cosa simile utilizzando Inheritance definito tratti, che al fianco di interfacce, fondamentalmente mi ha dato quello che un multiplo estendere darebbe.

1

Dai uno sguardo allo embeddables oppure potresti utilizzare i tratti.

Problemi correlati