Doctrine – dotaz zda existují prvky v kolekci
- kejlicz
- Člen | 201
Ahoj všem.
Lámu si hlavu s tím, jak v Doctrine zapsat dotaz, abych získal toto:
Mám entitu JobAgent, ta má kolekci jobs, které může obsahovat
entity Job.
Potřebuji vrátit entity JobAgent, které mají nějaké entity Job s té kolekci jobs. Zní to jednoduše a asi to i jednoduché bude, ale já už tady šílím a nemůžu nic najít.
Díky moc za pomoc.
- Marek Šneberger
- Člen | 130
Dotazem si vyhydratuješ jakékoli joby (třeba všechny), a pak jednouše v entitě Job například:
/**
* @return Job[]
*/
public function getActiveJobs()
{
$jobs = $this->items->filter(function (Job $job) {
return $job->isActive();
});
return $jobs->toArray();
}
Editoval Marek Šneberger (12. 8. 2016 15:13)
- abc
- Člen | 92
Není lepší na tohle použít Criteria – http://docs.doctrine-project.org/…iations.html#…
/**
* @return Job[]
*/
public function getActiveJobs()
{
$criteria = Criteria::create();
$criteria->where(Criteria::expr()->eq('active', TRUE);
$jobs = $this->items->matching($criteria);
return $jobs->toArray();
}
- jiri.pudil
- Nette Blogger | 1032
Jestli potřebuješ filtrovat už na úrovni dotazu na JobAgent, pak
nejspíš hledáš DQL konstrukci MEMBER
OF: SELECT ja FROM JobAgent WHERE :jobId MEMBER OF ja.jobs
- kejlicz
- Člen | 201
Úplně jsme se nepochopili. Koukám, že můj popis nechává prostor i pro jiný výklad. Omlouvám se. Pokud to chápu, reakce se týkají trochu něčeho jiného, ale to se také hodí a nastuju to :-)
Tak přesněji:
Potřebuji vrátit všechny entity JobAgent, které mají v kolekci jobs,
alespoň jeden prvek (Job). O jaký konkrétně jde Job mě nezajímá.
- David Matějka
- Moderator | 6445
by mohlo jit
SELECT jobAgent FROM JobAgent jobAgent WHERE SIZE(jobAgent.jobs) > 0