使用 Doctrine Query Builder 执行连接查询
Perform a join query using Doctrine Query Builder
如果某个产品的数量等于 1,我不想在我的索引页面中显示该产品。该产品的数量存储在 table 数量中。 table 数量是 link 到产品 (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');
}
这只会 return 数量 > 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();
}
如果您想要 return 所有产品,但只有数量大于 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();
}
如果某个产品的数量等于 1,我不想在我的索引页面中显示该产品。该产品的数量存储在 table 数量中。 table 数量是 link 到产品 (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');
}
这只会 return 数量 > 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();
}
如果您想要 return 所有产品,但只有数量大于 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();
}