请求多列Symfony2 Doctrine

时间:2015-11-18 13:39:30

标签: php symfony doctrine-orm

我想要一个专栏,所以我可以删除它。这是表(SerialNumber)布局:

  • id
  • product_revision_id
  • booking_id
  • serial_nr

现在我有了booking_id和product_revision_id值,这就是我想要选择的方式。

像这样:

SELECT* FROM SerialNumber WHERE booking_id = '123456' AND product_revision_id = '987456'

然后像这样:

 $serial_nr = $em->getRepository("KopictAdminBundle:SerialNumber")->find();

有人可以指出我正确的方向吗?

--------------请求编辑--------------------

class SerialNumber
{
    /**
     * @var integer $id
     */
    private $id;

    /**
     * @var interger $product_revision_id
     */
    private $product_revision_id;

    /**
     * @var interger $booking_id
     */
    private $booking_id;

    /**
     * @var string $serial_nr
     */
    public $serial_nr;


    /**
     * Get id
     *
     * @return integer 
     */
    public function getId()
    {
        return $this->id;
    }

    /**
     * Set product_revision_id
     *
     * @param integer $product_revision_id
     * @return SerialNumber
     */
    public function setProduct_revision_id($product_revision_id)
    {
        $this->product_revision_id = $product_revision_id;

        return $this;
    }

    /**
     * Get product_revision_id
     *
     * @return integer 
     */
    public function getProduct_revision_id()
    {
        return $this->product_revision_id;
    }

    /**
     * Set booking_id
     *
     * @param integer $booking_id
     * @return SerialNumber
     */
    public function setBooking_id($booking_id)
    {
        $this->booking_id = $booking_id;

        return $this;
    }

    /**
     * Get booking_id
     *
     * @return integer 
     */
    public function getBooking_id()
    {
        return $this->booking_id;
    }

    /**
     * Set serial_nr
     *
     * @param string $serial_nr
     * @return SerialNumber
     */
    public function setSerial_nr($serial_nr)
    {
        $this->serial_nr = $serial_nr;

        return $this;
    }

    /**
     * Get serial_nr
     *
     * @return string 
     */
    public function getSerial_nr()
    {
        return $this->serial_nr;
    }
}

1 个答案:

答案 0 :(得分:2)

在您的SerialNumberRepository.php中:

/.../

public function findByBookingAndProduct($idBooking, $idProduct)
{
    return $this->createQueryBuilder('s')
        ->where('s.booking_id = :booking_id')
        ->andWhere('s.product_revision_id = :product_id')
        ->setParameter('booking_id', $idBooking)
        ->setParameter('product_id', $idProduct)
        ->getQuery()
        ->getResult()
    ;
}

编辑:如果您只想捕获序列号:

public function findByBookingAndProduct($idBooking, $idProduct)
{
    return $this->createQueryBuilder('s')
        ->select('s.serial_nr')
        ->where('s.booking_id = :booking_id')
        ->andWhere('s.product_revision_id = :product_id')
        ->setParameter('booking_id', $idBooking)
        ->setParameter('product_id', $idProduct)
        ->getQuery()
        ->getOneOrNullResult()
    ;
}

在你的控制器中:

/.../

$serial_nr = $em->getRepository("KopictAdminBundle:SerialNumber")->findByBookingAndProduct("123456", "987654");

/.../

您还必须在您的实体中声明您的存储库:

/**
 * SerialNumber
 *
 *  @ORM\Entity(repositoryClass="AppBundle\Repository\SerialNumberRepository")
 */
class SerialNumber {
    ...
}