2015-09-15 6 views
0

Получили эту сущность:Доктрина - Get продает между двумя датами

/** 
* @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 для сборки этой таблицы?

ответ

0

Создайте собственный DQL (в репозитории, который я предлагаю), чтобы получить все платежи, где payment.date => yourSmallerUserDate и payment.date < = yourBiggerUserDate.

Результатом будут все платежи между двумя датами.

В вашей логике вы строите таблицу со строкой в ​​день между двумя датами. И всякий раз, когда у вас есть дата в вашем результате, соответствующая вашей дате строки, добавьте ее в свой вывод.

1

Вполне возможно, что вам нужно, это функция orX() поставляется Doctrine-ORM

Вам нужно будет создать два выражения с помощью функции exp(), то вы можете поместить оба выражения в orX() заявление, чтобы получить требуемые Результаты.

Для выражений, которые необходимо определить, вам нужна функция
gt()/lt() - больше чем/меньше, чем
Это даст вам возможность сравнить две даты

Для дополнительной контрольной проверки ссылку:
https://doctrine-orm.readthedocs.org/en/latest/reference/query-builder.html#high-level-api-methods

PS: для readabilty и логики это должно быть проще создать выражение перед inserti нг их в запросе:

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

... 

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

Обратите внимание, что orX может агрегировать неограниченное число выражений

 Смежные вопросы

  • Нет связанных вопросов^_^