使用Doctrine Query Builder执行连接查询

时间:2016-05-18 20:24:52

标签: mysql sql symfony doctrine-orm dql

如果产品的数量等于1,我希望不在我的索引页面中显示产品。产品的数量存储在表格数量中。表数量是产品链接(ManyToOne)。

这就是我所做的。

 public function product($id)
    {
        $query = $this->createQueryBuilder('e')
            ->leftJoin('e.quantity', 'r')
            ->where('r.quantity = :id')
            ->setParameter('id', $id)
            ->getQuery();

        return $query->getResult();
    }

数量

 /**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer", nullable=false)
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Post", cascade={"remove"})
     * @ORM\JoinColumn(name="product_id", referencedColumnName="id")
     */
    protected $desk2;

    /**
     * @var integer
     * @ORM\Column(name="quantity", type="integer", nullable=true)
     */
    protected $quantity;

产品

/**
 * @var integer
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */

private $id;
/**
 * @var string
 *
 * @ORM\Column(name="telephone", type="string", length=30)
 */
private $telephone;

/**
 * @var string
 *
 * @ORM\Column(name="name", type="string", length=125)
 */
private $name;

/**
 * @var string
 *
 * @ORM\Column(name="description", type="text" , length=125)
 */
private $description;

索引

 public function indexvAction($id)
    {

        $session = $this->getRequest()->getSession();
        $em = $this->getDoctrine()->getManager();
        $findEntities = $em->getRepository('FLYBookingsBundle:Post')->product($id);
        $entity = $this->get('knp_paginator')->paginate($findEntities, $this->get('request')->query->get('page', 1), 9
        );
        if ($session->has('cart'))
            $cart = $session->get('cart');
        else
            $cart = false;
        return $this->render('FLYBookingsBundle:Post:indexv.html.twig', array('entity' => $entity,
            'cart' => $cart));
    }

修改

默认值: index.html.twig

{% extends "::base.html.twig" %}
        {% block newadvert %}
                <div class="span4 offset1">
                </div>
                {{ render(controller('FLYBookingsBundle:Post:indexv')) }}
        {% endblock newadvert %}

控制器:

  public function indexAction()
  {

    return $this->render('FLYPlatformBundle:Default:index.html.twig');


  }

1 个答案:

答案 0 :(得分:2)

这只会返回数量> gt的产品。 1(或您传递的任何数量参数)。

 public function product($quantityLimit)
    {
        $query = $this->createQueryBuilder('e')
            ->join('e.quantity', 'r')
            ->addSelect('r')
            ->where('r.quantity > :quantityLimit')
            ->setParameter('quantityLimit', $quantityLimit)
            ->getQuery();

        return $query->getResult();
    }

如果您想退回所有产品,但只返回它们的数量&gt; 1你会像这样使用leftJoin。

 public function product($quantityLimit)
    {
        $query = $this->createQueryBuilder('e')
            ->leftJoin('e.quantity', 'r', 'WITH', 'r.quantity > :quantityLimit')
            ->addSelect('r')
            ->setParameter('quantityLimit', $quantityLimit)
            ->getQuery();

        return $query->getResult();
    }