Interogare complexă în Builder de interogări

Cum pot executa această interogare utilizând QueryBuilder în Symfony 2

SELECT um.id, sv.patentgroup_id, pm.portfolio_id, pp.id
FROM sv_patents sv
LEFT JOIN pm_patentgroups pm ON sv.patentgroup_id = pm.id
LEFT JOIN pm_portfolios pp ON pm.portfolio_id = pp.id
LEFT JOIN um_users um ON pp.user_id

Asociațiile din clasele de entități sunt definite ca

În SvPatents am

 /**
 * @var PmPatentgroups
 *
 * @ORM\ManyToOne(targetEntity="PmPatentgroups")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="patentgroup_id", referencedColumnName="id")
 * })
 */
private $patentgroup;

În PmPatentgroups am

/**
 * @var PmPortfolios
 *
 * @ORM\ManyToOne(targetEntity="PmPortfolios")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="portfolio_id", referencedColumnName="id")
 * })
 */
private $portfolio_id;

În PmPortfolios am

/**
 * @var UmUsers
 *
 * @ORM\ManyToOne(targetEntity="UmUsers")
 * @ORM\JoinColumns({
 *   @ORM\JoinColumn(name="user_id", referencedColumnName="id")
 * })
 */
private $user;

Am încercat acest lucru, dar îmi dă toate rezultatele din tabel, arată că nu se lucrează prea bine

$repository = $this->getDoctrine()->getRepository('MunichInnovationGroupBundle:SvPatents');
        $qb = $repository->createQueryBuilder('sv')
        ->leftJoin('sv.patentgroup','pm')
        ->leftJoin('pm.portfolio_id','pp')
        ->leftJoin('pp.user','um')
        ->getQuery();
        $patents = $qb->getArrayResult();

Sunt destul de nou pentru Symfony2 și Doctorine2. Am citit întreaga documentație, dar nu am putut găsi un astfel de exemplu complex, de fapt, eu sunt puțin confuz cu modul în care querybuilder construi interogarea. Ar fi grozav să explici puțin în cuvinte simple

Mulțumesc anticipat

0

2 răspunsuri

Am găsit soluția problemei mele. Dacă u caută înregistrările unui anumit utilizator în tabel, atunci trebuie să adăugați una în cazul în care o clauză. Acesta este modul în care ar trebui să arate interogarea dvs.

$user_id = 1;
        $repository = $this->getDoctrine()->getRepository('MunichInnovationGroupBundle:SvPatents');
        $qb = $repository->createQueryBuilder('sv')
        ->select('sv')
        ->leftJoin('sv.patentgroup','pm')
        ->leftJoin('pm.portfolio_id','pp')
        ->leftJoin('pp.user','um')
        ->where('pp.user = :user_id')
        ->setParameter('user_id', $user_id)
        ->getQuery();
        $patents = $qb->getArrayResult();

Asta e tot :)

0
adăugat

You're very close. You just have to add a ->select() query part:

$repository = $this->getDoctrine()->getRepository('MunichInnovationGroupBundle:SvPatents');
$qb = $repository->createQueryBuilder('sv')
                 ->select('um.id, pm.id, pp.id')//add this part
                 ->leftJoin('sv.patentgroup','pm')
                 ->leftJoin('pm.portfolio_id','pp')
                 ->leftJoin('pp.user','um')
                 ->getQuery();
$patents = $qb->getArrayResult();
0
adăugat
după adăugarea selectorului, acesta a dat ID-urile doar tabelului sv_ptents și din nou înregistrări întregi cu ochi la uita-te la sql din partea de sus ceea ce am nevoie pentru a prelua
adăugat autor Zoha Ali Khan, sursa
Fixat-o mulțumită pentru ajutorul tău :)
adăugat autor Zoha Ali Khan, sursa
De fapt, am fost în căutarea unor înregistrări utilizator specifice și pentru că am nevoie pentru a adăuga una în cazul în care clauza după toate stânga se alătură Asta a lucrat pentru mine
adăugat autor Zoha Ali Khan, sursa
Trebuie să încarc interogarea corectă ca răspuns sau să modificați întrebarea mea cu o interogare corectă
adăugat autor Zoha Ali Khan, sursa
eu voi răspunde, dar voi accepta răspunsul dvs. oricum :)
adăugat autor Zoha Ali Khan, sursa
Spuneți-ne ce a lucrat în felul acesta pentru toată lumea.
adăugat autor ziad-saab, sursa
De obicei, găsesc că oamenii răspund la propria lor întrebare.
adăugat autor ziad-saab, sursa
PHP România, Moldova
PHP România, Moldova
173 participanți

Vorbim despre Yii, Laravel, Symphony, MySQL, PgSQL, WP, OpenCart... Pentru confort, opriți notificările. Parteneri: https://ciupacabra.com @js_ro @node_ro @python_ro @seo_ro @Romania_Bot Offtop: @holywars_ro Joburi: @php_job @Grupuri_IT