dovt85093 2014-12-13 22:24
浏览 27
已采纳

从记录中查询Doctrine2

I have a model where categories have children and parents. Products a re linked to a category. I would like to retrieve a list of products from the children of a certain category. I thought of doing something similar to doctrine1 in my templates:

{% for category in productsByCategories %}
    <h2>{{ category.label }}</h2>
    <ul class="products-list">
    {% for product in category.getLatestProductFromChildCategories() %}

However i don't know how to do it as i would need to pass the category repository object to my category object, and i am sure this is not a good idea.

Generally, how would i query from the category object (similar to how we were doing in records in doctrine1)?

Thanks !

  • 写回答

1条回答 默认 最新

  • dongwei3151 2014-12-13 22:36
    关注

    Would something like this achieve what you want ?

    Twig

    {% for category in productsByCategories %}
        <h2>{{ category.label }}</h2>
        <ul class="products-list">
        {# Loop through child categories #}
        {% for child in category.children %}
            {# Get products from the current child category #}
            {% for product in child.latestProducts %}
                <li>{{ product }}</li>
            {% endfor %}
        {% endfor %}
    {% endfor %}
    

    Category.php

    <?php
    // ...
    public function latestProducts() {
        $length = 10;
        if ($this->products->count() < $length) $length = $this->products->count();
        $offset = $this->products->count() - $length;
        return $this->products->slice($offset, $length);
    }
    // ...
    

    I guess you could also try querying the latest products in your controller.

    Controller.php

    <?php
    public function showAction() {
        // ...
        $em = $this->getDoctrine()->getManager();
        // Get the main categories, then loop through them
        foreach ($categories as $category) {
            $childrenIds = array();
            foreach ($categories->getChildren() as $child) {
                array_push($childrenIds, $child->getId());
            }
            // Get the latest products using DQL
            $products = $em->createQuery('SELECT p FROM Application\ProductBundle\Entity\Product p WHERE p.category_id IN (?1) ORDER BY date_add DESC')
                            ->setParameter(1, $childrenIds)
                            ->setMaxResults(10);
            $category->setLatestProducts($products);
        }
        // ...
        return $this->render($template, array(
            'productsByCategories' => $categories
        ));
    }
    

    Category.php

    <?php
    protected $latestProducts;
    
    public function getLatestProducts() {
        return $this->latestProducts;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端
  • ¥15 基于PLC的三轴机械手程序
  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程