主义一对多的关系问题

时间:2014-08-01 07:13:37

标签: symfony doctrine-orm

我有两个实体

度假村和库存活动

度假村的房间与库存有一对多的关系。

我需要做的是将条件应用于库存表。

我已经使用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;

1 个答案:

答案 0 :(得分:0)

你可以发布完整的查询吗?我没有看到第一个实体或第二个实体的位置。

当第一个位置存在时,使用andWhere()。但如果它可能我会建议保持清洁,并在同一地方寻找多个参数:

->where(array('param1' => 1, 'param2' => 2))->setParameters()

如果关系是双向的,你可以去存储库:

 $em->getRepository('Repo:Entity')->findByMalesCount($data['numMales']);