主义 - 两个日期之间的销售

时间:2015-09-15 15:28:00

标签: php mysql symfony doctrine-orm

有了这个实体:

/**
 * @ORM\Table(name="shop_payment_details")
 * @ORM\Entity(repositoryClass="Acme\ShopBundle\Entity\PaymentRepository")
 */
class Payment extends ArrayObject
{
    /**
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     *
     * @var integer $id
     */
    protected $id;

    /**
     * @ORM\ManyToOne(targetEntity="Acme\UserBundle\Entity\User")
     * @ORM\JoinColumn(name="user_id", referencedColumnName="id")
     **/
    protected $user;

    /**
     * @ORM\ManyToOne(targetEntity="Acme\ShopBundle\Entity\Item")
     * @ORM\JoinColumn(name="item_id", referencedColumnName="id")
     **/
    protected $item;

    /**
     * @ORM\Column(name="date", type="datetime", nullable=true)
     */
    protected $date;

    /**
     * @ORM\Column(name="amount", type="float", nullable=true)
     */
    protected $amount;

我需要在他选择的两个日期之间提交销售表。 该表必须包含两个日期之间的所有日期以及商店中对象的参考代码。

例如: Example of table im searching to do

我怎样才能得到它?可以只使用Doctrine来实现,或者我必须使用PHP来构建该表吗?

2 个答案:

答案 0 :(得分:1)

有可能,您需要的是Doctrine-ORM提供的orX()函数

您需要使用函数exp()创建两个表达式,然后您可以将两个表达式放在orX()语句中以获得所需的结果。

对于您需要定义的表达式,您需要功能
gt()/lt() - 大于/小于
这样您就可以比较两个日期

如需进一步参考,请查看以下链接:
https://doctrine-orm.readthedocs.org/en/latest/reference/query-builder.html#high-level-api-methods

<强> PS: 对于可读性和逻辑,在将表达式插入查询之前创建表达式应该更容易:

$exp1 = $qb->expr()->gt('..', '?value');
$exp2 = $qb->expr()->gt('..', '?value2'),

...

$qb->where($qb->expr()->orX($exp1, $exp2));

请注意orX可以聚合无限数量的表达式

答案 1 :(得分:0)

创建自定义DQL(在我建议的存储库中)以检索所有付款,其中payment.date =&gt; yourSmallerUserDate和payment.date&lt; = yourBiggerUserDate。

结果将是您的两个日期之间的所有付款。

在您的逻辑中,您构建一个表,在您的两个日期之间每天有一行。只要您的结果中的日期与您的行日期相匹配,请将其添加到您的输出中。