praegune kellaaeg 19.06.2025 13:15:08
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
kpihus
Kreisi kasutaja

liitunud: 14.04.2003
|
08.10.2013 03:36:38
Symfony & Doctrine, JOIN päring |
|
|
Ahoi,
Oleteme et meil on kaks olemit, olgu selleks näiteks Category ja Product, stiilis:
Category - 1 -------------1...*- Product
Kui me tahame leida tooted ja koos nende kategooriatega, siis see on imelihtne:
$query = $this->getEntityManager()
->createQuery('
SELECT p, c FROM SomeBundle:Product p
JOIN p.category c);
|
Tekib tulemus stiilis:
Toode1
|----Kategooria1
Toode2
|----Kategooria 1
Kuidas aga joinida juhul kui me tahame pärida kõik kategooriad ja neisse kuulvad tooted.
Tulemus peaks olema selline:
Kategooria1
|----Toode1
|----Toode2
Kategooria2
|---- null
|
|
Kommentaarid: 26 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
25 |
|
tagasi üles |
|
 |
2korda2
HV kasutaja
liitunud: 19.07.2003
|
08.10.2013 10:33:01
|
|
|
select k.nimi, p.nimi
from kategooria k
left outer join produkt p on (p.kategooria_id=k.id) --eeldan, et mudelis kuulub produkt ainult ühe kategooria alla ja seos on sedasi tehtud
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
kpihus
Kreisi kasutaja

liitunud: 14.04.2003
|
14.10.2013 16:21:59
|
|
|
Ei ole ikka päris see. Lähme rohkem detaili. Panen siia postituse mille kirjutasin Symfony foorumisse, kindlasti on meil siin kodumaal ka helgeid päid, kes läbi ammustavad, milles kühvel. Sorry et inglise keeles, aga ju itimees inglise keelest ikka aru saab.
---------------------
Ok, lets make it little more clear with real life case.
I have four entities: AdminBundle:Employee, AtuhBundle:Login, AdminBundle:Employeephone and AdminBundle:EmployeEemal.
Of course they have relatons to each other:
Employee
/**
* @var Doctrine\Common\Collections\ArrayCollection $login
* @ORM\OneToMany(targetEntity="Crm\AuthBundle\Entity\Login", mappedBy="employee_id", cascade={"persist"})
*/
protected $login;
/**
* @var Doctrine\Common\Collections\ArrayCollection $phone
* @ORM\OneToMany(targetEntity="Crm\AdminBundle\Entity\EmployeePhone", mappedBy="employee_id", cascade={"persist"})
*/
protected $phone;
/**
* @var Doctrine\Common\Collections\ArrayCollection $email
* @ORM\OneToMany(targetEntity="Crm\AdminBundle\Entity\EmployeeEmail", mappedBy="employee_id", cascade={"persist"})
*/
protected $email;
|
Login
/**
* @ORM\ManyToOne(targetEntity="Crm\AdminBundle\Entity\Employee", inversedBy="login", cascade={"persist"})
* @ORM\JoinColumn(name="employee_id", referencedColumnName="id")
*/
protected $employee;
|
Phone
/**
* @ORM\ManyToOne(targetEntity="Crm\AdminBundle\Entity\Employee", inversedBy="login", cascade={"persist"})
* @ORM\JoinColumn(name="employee_id", referencedColumnName="id")
*/
private $employee;
|
Email
/**
* @ORM\ManyToOne(targetEntity="Crm\AdminBundle\Entity\Employee", inversedBy="login", cascade={"persist"})
* @ORM\JoinColumn(name="employee_id", referencedColumnName="id")
*/
private $employee;
|
Now i want to rul query what gets list of all users with their primary phone and email (only one is primary), in sql i would write this query like this:
SELECT * FROM `login`
LEFT JOIN `employee` on `login`.`employee_id` = `employee`.`id`
LEFT JOIN `employeephone` on `employee`.`id` = `employeephone`.`employee_id`
LEFT JOIN `employeeemail` on `employee`.`id` = `employeeemail`.`employee_id`
WHERE `employeephone`.`is_primary`=1
AND `employeeemail`.`is_primary`=1
|
But i can't figure out, how it should look like on Doctrine world.
I tried to do it like this:
class EmployeeRepository extends EntityRepository {
public function getAllEmployees() {
$dql = "SELECT e, l, p, m FROM AuthBundle:Login l
JOIN l.employee e
JOIN e.phone p
JOIN e.email m";
$query = $this->getEntityManager()->createQuery($dql);
try {
return $query->getArrayResult();
} catch (\Doctrine\ORM\NoResultException $e) {
return null;
}
}
}
|
But it gives me little nice error:
tsitaat: |
Notice: Undefined index: employee_id in C:\wamp\www\Symphony\vendor\doctrine\orm\lib\Doctrine\ORM\Query\SqlWalker.php line 826
|
I've tried several other methods, but all of them lead me to different errors. So how to do it correctly ?
|
|
Kommentaarid: 26 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
25 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|