我有两个实体
度假村和库存活动
度假村的房间与库存有一对多的关系。
我需要做的是将条件应用于库存表。
我已经使用DQL进行了查询,但是它提供了库存的所有结果。它没有应用条件。
$qb->select('ih.id,rr')
->from('\Base\Entity\Avp\ResortRooms', 'rr')
->leftJoin('rr.inventory','ih');
if($data['numMales']):
$qb->andWhere('ih.malesCount >= :males')
->setParameter("males",(int)$data['numMales']);
我想要malesCount为2的广告资源的结果。
以下是我的两个实体
ResortRooms
class ResortRooms extends \Base\Entity\Base\BaseEntity
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @var string
*
* @ORM\Column(name="title", type="string", length=255, nullable=false)
*/
protected $title;
/**
* @var string
*
* @ORM\Column(name="description", type="text", nullable=true)
*/
protected $description;
/**
* @var integer
*
* @ORM\Column(name="resort_id", type="integer", nullable=false)
*/
protected $resortId;
/**
* @var string
*
* @ORM\Column(name="price", type="decimal", precision=10, scale=0, nullable=false)
*/
protected $price = '0';
/**
* @var string
*
* @ORM\Column(name="image", type="string", length=50, nullable=true)
*/
protected $image;
/**
* @var string
*
* @ORM\Column(name="meta_title", type="string", length=255, nullable=true)
*/
protected $metaTitle;
/**
* @var \DateTime
*
* @ORM\Column(name="last_updated", type="datetime", nullable=true)
*/
protected $lastUpdated;
/**
* @var integer
*
* @ORM\Column(name="in_stock", type="integer", nullable=false)
*/
protected $inStock = '0';
/**
* @var integer
*
* @ORM\OneToMany(targetEntity="Base\Entity\InventoryHotels", mappedBy="roomId")
*/
protected $inventory;
public function __construct() {
$this->inventory = new ArrayCollection();
}
public function getInventory() {
return $this->inventory;
}
库存酒店
class InventoryHotels extends Base\BaseEntity
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer", nullable=false)
* @ORM\Id
* @ORM\GeneratedValue(strategy="IDENTITY")
*/
protected $id;
/**
* @var integer
*
* @ORM\Column(name="resort_id", type="integer", nullable=false)
*/
protected $resortId;
/**
* @var \Base\Entity\Avp\ResortRooms
*
* @ORM\ManyToOne(targetEntity="Base\Entity\Avp\ResortRooms",inversedBy="inventory")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="room_id", referencedColumnName="id")
* })
*/
protected $roomId;
答案 0 :(得分:0)
你可以发布完整的查询吗?我没有看到第一个实体或第二个实体的位置。
当第一个位置存在时,使用andWhere()。但如果它可能我会建议保持清洁,并在同一地方寻找多个参数:
->where(array('param1' => 1, 'param2' => 2))->setParameters()
如果关系是双向的,你可以去存储库:
$em->getRepository('Repo:Entity')->findByMalesCount($data['numMales']);