Uestla/YetORM M:N order by

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

Dobrý den,

používám YetORM https://github.com/uestla/YetORM a řeším s tím už delší dobu takový problém.
Jak řešit order by přímo v entitě, když chci získat data co jsou M:N?

Můj kód je asi takový:

class CategoryEntity extends Entity
{
    public function getProducts()
    {
		$selection = $this->toRecord()->related("product_x_category", "category_id");

		return (new \YetORM\EntityCollection(
            $selection,
            self::getClass("ProductEntity"),
            "products",
            "product_id"
        ));
	}
}

Funguje to krásně, nicméně jak do toho nacpat order by, aby produkty byly seřazeny podle jejich pozic? Zkoušel jsem logicky následující:

return (new \YetORM\EntityCollection(
            $selection,
            self::getClass("ProductEntity"),
            "products",
            "product_id"
        ))->orderBy("position");

Nicméně mi vyjede hláška, že tabulka neobsauje sloupec position, protože se snaží získat position z tabulky product_x_category, kde samozřejmě není – je až v products…

Věděl by někdo jak na to? Je mi jasné, že to lze jednoduše vyřešit pomocí repository, ale potřeboval bych zachovat to, že se mi vrátí objekty třídy ProductEntity a ne DB rows.

Děkuju za Vaše rady.

Pavel Kravčík
Člen | 1196
+
0
-

EntityCollection má orderBy(). https://github.com/…llection.php

Problém je návrh databáze. YetORM je lightweight, na tohle použij Doctrine.

Томас
Člen | 85
+
0
-

Pavel Kravčík napsal(a):

EntityCollection má orderBy(). https://github.com/…llection.php

Problém je návrh databáze. YetORM je lightweight, na tohle použij Doctrine.

takže nejednodušší způsob v tuto chvíli je napsat si dotaz sám v repository a hold se spokojit s tím, že mi to nevrátí entity?

(nemůžu teď convertovat na doctrine a potřebuju to mít hotové ideálně včera :D)

uestla
Backer | 799
+
0
-

$category->getProducts()->orderBy('products.position') by mohlo fungovat…

Editoval uestla (12. 2. 2016 10:19)

Томас
Člen | 85
+
0
-

uestla napsal(a):

$category->getProducts()->orderBy('products.position') by mohlo fungovat…

Ahoj, zkoušel jsem.

No reference found for $product_x_category->products, nevím co tedy dělám špatně.

Pavel Kravčík
Člen | 1196
+
+1
-

To bys musel mít definované „vazby mezi tabulkami“, aby tohle fungovalo.

Томас
Člen | 85
+
0
-

Pavel Kravčík napsal(a):

To bys musel mít definované „vazby mezi tabulkami“, aby tohle fungovalo.

Dobře, díky.