doctrine2 findby two columns OR condition
16,523
Solution 1
You can use QueryBuilder or create a custom repository for that entity and create a function that internally use QueryBuilder.
$qb = $em->getRepository('FrontendChancesBundle:ChanceMatch')->createQueryBuilder('cm');
$qb
->select('cm')
->where($qb->expr()->orX(
$qb->expr()->eq('cm.requestUser', ':requestUser'),
$qb->expr()->eq('cm.replyUser', ':replyUser')
))
->setParameter('requestUser', $requestUserId)
->setParameter('replyUser', $replyUserId)
;
$matches_reply = $qb->getQuery()->getSingleResult();
// $matches_reply = $qb->getQuery()->getResult(); // use this if there can be more than one result
For more information on custom Repository see official documentation:
http://symfony.com/doc/2.0/book/doctrine.html#custom-repository-classes
Solution 2
It's possible to use Criteria
for the complex queries with getRepository()
:
$criteria = new \Doctrine\Common\Collections\Criteria();
$criteria
->orWhere($criteria->expr()->contains('domains', 'a'))
->orWhere($criteria->expr()->contains('domains', 'b'));
$domain->ages = $em
->getRepository('Group')
->matching($criteria);
Author by
craphunter
Updated on July 03, 2022Comments
-
craphunter almost 2 years
My action:
$matches_request = $em->getRepository('Bundle:ChanceMatch')->findByRequestUser(1); $matches_reply = $em->getRepository('Bundle:ChanceMatch')->findByReplyUser(1);
Is it possible to join the querys with an
or
condition with getRepository, eg.$matches_reply = $em->getRepository('FrontendChancesBundle:ChanceMatch')->findBy(array('requestUser' => 1, 'replyUser' => 1); //this of course gives me the a result when `requestUser` and `replyUser` is `1`.
My table
id | requestUser | replyUser .... 12 | 1 | 2 13 | 5 | 1
My query should return the
id 12 & 13
.Thanks for help!