Ich versuche, die folgende Abfrage zu tun:Wie man eine UNION mit Lehre macht?
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;
}
alle meine Benachrichtigungen zu generieren:
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
));
}
Die Idee ist, eine Suche auf ADUser Tabelle zu tun, die alle Benachrichtigungen zurückgibt, die Anzeigen haben, die Der angemeldete Benutzer besitzt zusammen mit allen Benachrichtigungen, die den angeforderten Benutzer protokolliert haben.
Benachrichtigung Der angeforderte Benutzer ist eine Zeile der AdUser-Tabelle mit der Spalte, in der sich der Benutzer angemeldet hat. Benutzer.
Die Doctrine Query Language unterstützt das Schlüsselwort 'UNION' nicht. Eine Problemumgehung finden Sie unter http://stackoverflow.com/questions/4155288/how-to-write-union-in-doctrine-2-0 –
Dies wird ein Problem sein, dass Sie wissen, wird eine Möglichkeit sein, was zu tun Ich will? Die Antwort von der anderen pergunda nicht letztlich helfen mir soulação es war seine Tabelle in zwei brechen und ich will es nicht, will nur eine Liste mit den beiden Abfragen zu generieren. –
Möchten Sie die ersten 20 Benachrichtigungen erhalten, bei denen der angemeldete Benutzer die Anzeige besitzt, gefolgt von den ersten 20 Benachrichtigungen, die der angemeldete Benutzer angefordert hat? Wenn ja, verstehe ich nicht, warum Sie dieses Ergebnis dann auf die ersten 20 Benachrichtigungen dieser Benachrichtigungen (Ihr letztes "LIMIT") beschränken möchten. Ist "notification" gemeint "n"? –