Próbuję wykonać następujące zapytanie:Jak stworzyć UNIĘ z Doctrine?
public function findByNotifications($ownerId)
{
$em = $this->getEntityManager();
$query = $em->createQuery('
SELECT n FROM
(SELECT n FROM DelivveWebBundle:UserAd n
INNER JOIN n.ad ad
WHERE ad.owner = :ownerId
LIMIT 20
UNION
SELECT n FROM DelivveWebBundle:UserAd n
INNER JOIN n.user u
INNER JOIN n.ad ad
WHERE u.id = :ownerId
AND ad.status = :progress
LIMIT 20)
notofication
LIMIT 20;
')->setParameter('ownerId', $ownerId)
->setParameter('progress', Constant::AD_IN_PROGRESS);
$result = $query->getResult();
return $result;
}
generowania wszystkich moich powiadomień:
public function showNotificationsAction()
{
$this->denyAccessUnlessGranted('ROLE_USER', null, 'Unable to access this page!');
$owner = $this->getUser();
$repository = $this->getDoctrine()->getRepository('DelivveWebBundle:UserAd');
$notifications = $repository->findByAdOwner($owner->getId());
return $this->render('DelivveWebBundle:Ad:notification.html.twig', array(
'owner' => $owner,
'notifications' => $notifications
));
}
Chodzi o to, aby zrobić wyszukiwania w tabeli AdUser zwracającą wszystkie powiadomienia, które mają reklamy zalogowany Użytkownik jest właścicielem wraz z wszelkimi powiadomieniami, które zalogowały się na żądanie.
Powiadomienie żądanego użytkownika to linia tabeli AdUser, która zawiera kolumnę, w której zalogowany jest użytkownik.
The Doctrine Query Language nie obsługuje słowa kluczowego "UNION". Obejście można znaleźć pod adresem http://stackoverflow.com/questions/4155288/how-to-write-union-in-doctrine-2-0 –
To będzie problem, że wiesz, że będzie jakiś sposób, aby to zrobić Chcę? Odpowiedź z drugiej pergundy nie pomogła mi w tym, że zepsuł on swój stół na pół i nie chcę tego, chcę tylko wygenerować listę z dwoma zapytaniami. –
Czy chcesz uzyskać pierwsze 20 powiadomień, w których zalogowany użytkownik jest właścicielem reklamy, a następnie pierwsze 20 powiadomień, których zażądał zalogowany użytkownik? Jeśli tak, to nie rozumiem, dlaczego chciałbyś, aby ten wynik był ograniczony do pierwszych 20 powiadomień o tych powiadomieniach (twój ostatni "LIMIT"). Czy "notofication" ma oznaczać 'n'? –