12

と がclass categroiesありclass Productsます。

私のリポジトリには機能があります

getProducts($categoryid,$location)

このような小枝テンプレートをループする必要があります

 {% for category in categories %}
    --{{ category.name }}--
      {% for product in getProducts(category.id,location) %}
     --{{ product.name }}--
    {% endfor %}
 {% endfor %}

またはそのためのより良い方法はありますか

4

4 に答える 4

20

すべきではありません。これはビジネス ロジックであり、テンプレートには表示されません。1 つの解決策は、コントローラー内およびテンプレート呼び出しで新しいアクションを作成することです。

{% render '@MyBundle:Product:list' with {category: category.id} %}
于 2012-08-01T07:07:47.343 に答える
1

解決策は、これが現在行われている方法とは逆です。Category エンティティには、1 対多の関係が必要です。http://symfony.com/doc/2.0/book/doctrine.html#entity-relationships-associationsを見てください。

カテゴリ エンティティには、'products' と呼ばれる EntityCollection 属性が必要です。テンプレートでは、次の方法でこれを解決できます。

{% for category in categories %}
    --{{ category.name }}--
      {% for product in category.products %}
     --{{ product.name }}--
    {% endfor %}
 {% endfor %}
于 2013-01-18T15:51:22.850 に答える
1

本当に必要なのは、WITH 式を使用した左結合だけだと思います。何かのようなもの:

class CategoryManager
{
    public function loadCategoriesProductsForLocation($location)
    {
        $qb = $this->em->->createQueryBuilder();

        $qb->addSelect('category');
        $qb->addSelect('product');

        $qb->from('MyBundleBundle:Category','category');

        $qb->leftJoin('category.products','product', 
            Expr\Join::WITH, $qb->expr()->eq('product.location', $location));

これにより、特定の場所のそれぞれの製品を含むすべてのカテゴリが表示されます.

于 2012-08-01T14:23:40.130 に答える