Symfony createQueryBuilder JOIN

时间:2017-09-02 11:28:54

标签: symfony doctrine-orm

我试图从存储库中获取我的产品 我有3张桌子: - 类别 - 包含categorie_id的类型 - 包含types_id

的产品

我的树枝视图返回"变量产品不存在" 我的querybuilder出了什么问题? 谢谢

class ProduitsRepository extends \Doctrine\ORM\EntityRepository {

    public function byCategorie($categorie) {
        $qb = $this->createQueryBuilder('p')
                ->select('p') // Entity Produits
                ->join('p.type', 't')
                ->addSelect('t') // Entity Types
                ->where('p.type = t.id AND t.categorie = :categorie')
                ->orderBy('p.id')
                ->setParameter('categorie', $categorie);

        return $qb->getQuery()->getResult();      
    }
} 

好的,我添加一个截图 enter image description here

这是我的控制器

public function categorieAction($categorie)
{
    $em = $this->getDoctrine()->getManager();
    $produits = $em->getRepository('GbaBundle:Produits')->byCategorie($categorie);


    return $this->render('GbaBundle:Default:produits/layout/produits.html.twig', array(
        'produits' => $produits
    ));
}

这是我的twig view produits.html.twig

<ul class="thumbnails">
             {% for produit in produits %}
            <li class="span3">
                <div class="thumbnail">
                    <img src="{{ asset('img/holder.png') }}" alt="" width="300" height="300">
                    <div class="caption">
                        <h4>Thumbnail label</h4>
                        <p>100,00 €</p>

                        <a class="btn btn-primary" href="{{ path('gba_presentation') }}">Plus d'infos</a>

                        <a class="btn btn-success" href="{{ path('gba_panier') }}">Ajouter au panier</a>
                    </div>
                </div>
            </li>
              {% endfor %}
            </ul>

1 个答案:

答案 0 :(得分:1)

抱歉,我无法发表评论,但你应该给我们你的枝条文件,它可能对我们有所帮助。此外,我不认为它会改变任何东西,但我会写这样的查询:

$this->createQueryBuilder('p')
        ->select('p, t')
        ->join('p.type', 't')
        ->where('t.categorie = :categorie')
        ->orderBy('p.id')
        ->setParameter('categorie', $categorie);

编辑:查看截图,看起来您正在从错误的控制器操作渲染视图。您有一个名为categorieAction的操作和另一个名为produitsAction的操作(似乎是错误的操作)。您应该为这两个操作设置不同的路径以避免冲突。