12 нояб. 2015 г., 12:21 отTim Bgperriard

Как сравнить поле даты и времени из Doctrine2 с датой?

Я хочу получить предметы, которые были созданы сегодня с помощью QueryBuilder из Doctrine2. Я хочу сравнить поле createAt (Datetime) с параметром today (Дата). Возможно ли сделать это одним запросом?

$qb = $this->createQueryBuilder('i');
$qb->innerJoin('i.type', 'it');
$qb->andWhere('it.name = :type');
$qb->andWhere('i.createdAt < :today');
// i.createdAt == datetime and :today parameter is a date

Ответы на вопрос(6)

10 июл. 2013 г., 01:56 отsth

что такой зрелый ORM не обеспечиваетDATE функция. Однако, чтобы получить дату из поля datetime, вы можете применитьSUBSTRING функционировать так:

SELECT SUBSTRING(i.dateTimeField,1,10) FROM tableName i

Надеюсь, это поможет

21 окт. 2014 г., 15:17 отJaskaran Singh

Сначала вам нужно получить время начала и окончания:

$today_startdatetime = \DateTime::createFromFormat( "Y-m-d H:i:s", date("Y-m-d 00:00:00") );
$today_enddatetime = \DateTime::createFromFormat( "Y-m-d H:i:s", date("Y-m-d 23:59:59") );

Теперь используйте их в запросе:

$em = \Zend_Registry::get('em');
$qb_1 = $em->createQueryBuilder();
$q_1 = $qb_1->select('wsh')
    ->from('\Entities\wishes', 'wsh')
    ->where('wsh.created_at >= :today_startdatetime')
    ->andWhere('wsh.created_at <= :today_enddatetime');


$q_1->setParameter('today_startdatetime', $today_startdatetime);
$q_1->setParameter('today_enddatetime', $today_enddatetime);
$result= $q_1->getQuery ()->getResult ();
21 мая 2012 г., 15:57 отReuven

Вы должны добавить к вашему запросу QueryBuildertoday параметр.

$today = new \DateTime();
$qb->setParameter('today', $today->format('Y-m-d'));

С помощью QueryBuilder вы можете сравнить даты с DateTime в формате'Y-m-d'

21 мая 2012 г., 20:34 отstwe

год, месяц и день. А пото

$qb->select('p')
   ->where('YEAR(p.postDate) = :year')
   ->andWhere('MONTH(p.postDate) = :month')
   ->andWhere('DAY(p.postDate) = :day');

$qb->setParameter('year', $year)
   ->setParameter('month', $month)
   ->setParameter('day', $day);

ДЕНЬ МЕСЯЦА, И ГОД вы извлекаете DoctrineExtensions из

например

DoctrineExtensions

Это работает для меня. Вам нужны только файлы: day.php, month.php и year.php .....

Ты получаешь месяц нап

    $datetime = new \DateTime("now");
    $month = $datetime->format('m');
    echo $month;

Скопируйте day.php, month.php и year.php в ваш пакет Xy \ TestBundle \ Dql Зарегистрируйте новые функции в app \ config.yml с помощью

doctrine:


orm:
    auto_generate_proxy_classes: %kernel.debug%
    entity_managers:
        default:
            auto_mapping: true
            dql:
                datetime_functions:
                    month: Xy\TestBundle\Dql\Month
                    year: Xy\TestBundle\Dql\Year
                    day: Xy\TestBundle\Dql\Day
24 мая 2015 г., 00:55 отVitalii Zurian

Также можно использовать встроенную функциюDATE_DIFF(date1, date2) который возвращает разницу в днях. Проверьте @ Докумен

$result = $this->createQueryBuilder('l')
    ->where('DATE_DIFF(l.startDate, CURRENT_DATE()) = 0')
12 нояб. 2015 г., 17:08 отHKandulla

Легким решением было бы соответственно отформатировать дату и время

public function getWithStartingPremium(\DateTime $datetime)
{
    $qb = $this->createQueryBuilder('c');

    return $qb
        ->innerJoin('c.collegePremium', 'cp')
        ->where($qb->expr()->eq('cp.start', ':date'))
        ->setParameters(array(
            'date' => $datetime->format('Y-m-d'),
        ))
        ->getQuery()
        ->getResult();
}

ВАШ ОТВЕТ НА ВОПРОС