2014-05-04 17 views
10

È possibile avere associazione associazione con condizioni in Doctrine 2.4? Ho articoli Articolo e commenti. I commenti devono essere approvati dall'amministratore. lo stato di approvazione di commento viene memorizzato nel campo booleano "approvato.Associazione associazione doctrine2 con condizioni

Ora ho @OneToMany mappatura associazione ai commenti di entità articolo. Esso mappa tutti i commenti. Ma vorrei mappare commenti approvati.

Qualcosa come

@ORM\OneToMany(targetEntity="Comment", where="approved=true", mappedBy="article") 

sarebbe molto utile Purtroppo per quanto ne so non esiste una cosa come ad esempio dove condizione in mappatura, così ho cercato di risolvere il mio problema con l'ereditarietà -.. ho creato due sottoclassi di classe Comment Ora ho ApprovedComment e NotApprovedComment e mapping dell'eredità SINGLE_TABLE.

@ORM\InheritanceType("SINGLE_TABLE") 
@ORM\DiscriminatorColumn(name="approved", type="integer") 
@ORM\DiscriminatorMap({1 = "ApprovedComment", 0 = "NotApprovedComment"}) 

Il problema è che poiché la colonna "approvata" è discriminante, non posso più usarla come campo nell'entità Commento.

risposta

25

È possibile utilizzare l'API criteri per filtrare the collection:

<?php 

use Doctrine\Common\Collections\Criteria; 

class Article 
{ 

    /** 
    * @ORM\OneToMany(targetEntity="Comment", mappedBy="article") 
    */ 
    protected $comments; 

    public function getComments($showPending = false) 
    { 
     $criteria = Criteria::create(); 
     if ($showPending !== true) { 
      $criteria->where(Criteria::expr()->eq('approved', true)); 
     } 
     return $this->comments->matching($criteria); 
    } 

} 

Questo è particolarmente piacevole, perché Doctrine è abbastanza intelligente da solo andare al database se la raccolta non sia già stato caricato.

+0

Grazie, non mi sono reso conto che può filtrare a livello SQL. Questo è esattamente ciò di cui ho bisogno! :) – Klinki

+0

Non funziona con ManyToMany. Ottengo questo errore: indice non definito: relationToSourceKeyColumns. – kieste

+0

Non ho provato, ma a quanto sembra, si adatterebbe al lavoro che mi serve molto bene! –