Saya ingin mendapatkan item yang dibuat hari ini dengan QueryBuilder dari Doctrine2. Saya ingin membandingkan field createdAt (Datetime) dengan parameter hari ini (Date). Apakah mungkin untuk melakukan hal tersebut dalam satu query?
$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
salah satu idenya adalah mengekstrak dari tanggal: tahun, bulan, dan hari. Dan kemudian
$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);
BULAN HARI, dan TAHUN Anda mengambil DoctrineExtensions dari
contoh
Ini bekerja untuk saya. Anda hanya membutuhkan berkas: day.php, month.php dan year.php.....
Anda mendapatkan bulan misalnya:
$datetime = new \DateTime("now");
$month = $datetime->format('m');
echo $month;
Salin hari.php, bulan.php dan tahun.php ke bundel Anda Xy\TestBundle\Dql Daftarkan fungsi-fungsi baru di app\config.yml dengan
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
Jarang sekali ORM yang sudah matang tidak menyediakan fungsi DATE
. Namun, untuk mendapatkan tanggal dari bidang datetime, Anda dapat menerapkan fungsi SUBSTRING
seperti ini:
SELECT SUBSTRING(i.dateTimeField,1,10) FROM tableName i
Semoga dapat membantu!
Anda harus menambahkan parameter today
pada kueri QueryBuilder Anda.
$today = new \DateTime();
$qb->setParameter('today', $today->format('Y-m-d'));
Dengan QueryBuilder, Anda dapat membandingkan tanggal dengan DateTime dengan format 'Y-m-d'