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;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?