2013-04-11 1 views
1

J'ai une entité produit et elle peut avoir plusieurs attributs comme des applications. Où "applications" peuvent avoir des valeurs mutlles aussi.Rechercher parmi plusieurs valeurs dans Doctrine

Donc le produit a un tableau de valeurs pour les "applications", comment puis-je l'enregistrer avec Doctrine pour que je puisse faire un findBy ('applications' => 'any') ou similaire plus tard?

Product 1 
    application1 
    application3 

Product 2 
    application1 
    application2 

donc une suite findBy ('applications' => 'application1') devrait trouver les produits.

+0

vous devez utiliser DQL pour cela. – mpm

+0

Et vous devez créer une nouvelle entité appelez Applications. Puis joignez Product and Application avec une relation OneToMany. Après cela, vous pouvez faire une requête personnalisée avec le DQL de la Doctrine – Pierrickouw

Répondre

0

Essayez ceci:

public function findProductByApplication($app) { 
    $query = $this->em->createQuery('SELECT DISTINCT p FROM Product p JOIN p.applications app WHERE app = :app'); 
    $query->setParameter('app', $app); 
    return $query->getResult(); 
} 
3

Supposons que vous avez configuré un à plusieurs rapports entre vos entités, comme ceci:

entité produit:

/** 
* @ORM\OneToMany(targetEntity="Aplication", mappedBy="product", cascade={"persist"}) 
*/ 
protected $aplications; 

entité aplication:

* @ORM\ManyToOne(targetEntity="Product", inversedBy="aplications") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="product_id", referencedColumnName="id") 
* }) 
    protected $product; 

vous pouvez créer un DQL comme celui-ci sur votre dépôt de produit:

$qb = $this->getEntityManager()->createQueryBuilder(); 
$qb->select('p') 
    ->from('bundleNamespace:Product', 'p') 
    ->leftJoin('p.applications', 'a') 
    ->andWhere($qb->expr()->in('a.id', ':aplication')) 
        ->setParameter('aplication', $aplication); 

return $qb->getQuery()->getResult(); 
Questions connexes