Doctrine – dotaz zda existují prvky v kolekci

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
kejlicz
Člen | 201
+
0
-

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
+
-1
-

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
+
+1
-

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
+
0
-

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
+
0
-

Ú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
+
+2
-

by mohlo jit SELECT jobAgent FROM JobAgent jobAgent WHERE SIZE(jobAgent.jobs) > 0

kejlicz
Člen | 201
+
0
-

David Matějka napsal(a):

by mohlo jit SELECT jobAgent FROM JobAgent jobAgent WHERE SIZE(jobAgent.jobs) > 0

Díky moc. Příkaz SIZE jsem neznal.