Doctrine 2 – pomoc s dotazem

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

Ahoj všichni.

Zkouším si modelovat pomocí Doctrine 2 nějaké složitější vazby a zaboha nemůžu přijít na to, jak se dotazovat v tomto případě.

Mám entity Article a ta má oboustrannou vazbu ManyToMany na entitu Category.

U Category mám takto jednoduše udělané vazby na rodičovaskou kategorii a podkategorie

	    /**
	     * @ORM\OneToMany(targetEntity="Category", mappedBy="parent_category")
	     **/
	    private $subCategories;

	    /**
	     * @ORM\ManyToOne(targetEntity="Category", inversedBy="subCategories")
	     * @ORM\JoinColumn(name="parent_category_id", referencedColumnName="id")
	     **/
	    private $parent_category;

Když udělám dotaz na články v nějaké kategorii např.


	$query = $this->em
	         ->createQuery("SELECT a FROM \App\Entities\Article a
			                JOIN a.categories c
	                        WHERE c.slug = :cat");
	$query->setParameter('cat', $actualCategory->slug);

, tak to funguje.
Nedaří se mi ale přijít na to, jak udělám dotaz, zda je článek v určité kategorii nebo v její podkategoriích.

Napadlo mě něco jako


	$query = $this->em
	         ->createQuery("SELECT a FROM \App\Entities\Article a
			                JOIN a.categories c
			                JOIN c.subCategories s
	                        WHERE c.slug = :cat OR s.slug = :cat");
	$query->setParameter('cat', $this->template->actualCategory->slug);

ale to nejde. Zkoušel jsem toho dost, ale v těchto složitějších doatzech se nějak ztrácím a asi mi něco uniká.

Díky za nakopnutí.

Luděk Veselý
Člen | 29
+
0
-

Problem bude nejspis v miste JOIN c.subCategories s, kde by mel byt LEFT JOIN. Pokud pouzijes jen JOIN tak se ti na kategorii najoinuje podkategorie pouze u kategorii, ktere maj podkategorii.