Php 如何使用Symfony 3.4从完整日期(类型:日期)检索年份
我有一个date类型的日期字段。我想取今年的价值。谢谢你给我帮助。 因为我在网上搜索,但没有找到解决办法。 谢谢你的理解 这是我使用的日期格式: $date=$form->get('date')->getData(); $date->格式('Y-m-d') 这是我的存储库:Php 如何使用Symfony 3.4从完整日期(类型:日期)检索年份,php,symfony,Php,Symfony,我有一个date类型的日期字段。我想取今年的价值。谢谢你给我帮助。 因为我在网上搜索,但没有找到解决办法。 谢谢你的理解 这是我使用的日期格式: $date=$form->get('date')->getData(); $date->格式('Y-m-d') 这是我的存储库: public function findEnglishByTags($date, $categorie, $tags) { $tags_values = $tags->getValues(); ar
public function findEnglishByTags($date, $categorie, $tags) {
$tags_values = $tags->getValues();
array_walk($tags_values, function (&$item) {
$item = $item->getId();
});
$qb = $this->createQueryBuilder('english');
$qb->where('english.date = :date')
->andWhere('english.Categorie IN (:categories)')
->leftjoin('english.tags', 't')
->andWhere('t.id IN (:tags)')
->setParameters(array('date' => $date, 'categories' => $categorie->getId(), 'tags' => $tags))
;
return $qb->getQuery()->getResult();
}
我的控制器:
public function searchAction()
{
$form = $this->createForm('MDWEB\FrontBundle\Form\InEnglishFrontType');
$request = $this->container->get('request_stack')->getCurrentRequest();
$form->handleRequest($request);
$date = $form->get('date')->getData();
$categorie = $form->get('categorie')->getData();
$tags = $form->get('tags')->getData();
$em = $this->getDoctrine()->getManager();
$listEnglishs = $em->getRepository('MDWEBInEnglishBundle:InEnglish')
->findEnglishBytags(new \DateTime($date->format('Y')), $categorie, $tags);
return $this->render('MDWEBFrontBundle:InEnglish:list.html.twig', array(
'form' => $form->createView(),
'listEnglishs' => $listEnglishs
));
}
我想逐年更改日期,因为我的实体中没有名为Year的字段。new\DateTime($date->format('Y'))不起作用,因为没有这样的\DateTime
类构造函数。存在的一个,看起来像这样:
public __construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
$startDate = $date->format('Y-01-01');
$endDate = $date->format('Y-12-31');
$qb = $this->createQueryBuilder('english');
$qb->where('english.date BETWEEN :startDate AND :endDate')
->andWhere('english.Categorie IN (:categories)')
->leftjoin('english.tags', 't')
->andWhere('t.id IN (:tags)')
->setParameters(array('startDate' => $startDate, 'endDate' => $endDate,
'categories' => $categorie->getId(), 'tags' => $tags))
;
我对您的代码有点困惑,请帮助我理解:
- 您的表单有
字段日期
- 从表单输入中可以得到
对象\DateTime
- 您提取提交日期的年份,然后将该年份包装成新的
,并将其传递给存储库\DateTime
- 存储库使用该“日期”查询名为“日期”的列
那么,您的“日期”列真的是“日期”类型吗?问题在于您在存储库中使用的查询。由于数据库中有一个日期字段,并且希望检查该日期是否属于特定年份,因此必须执行以下操作:
public __construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
$startDate = $date->format('Y-01-01');
$endDate = $date->format('Y-12-31');
$qb = $this->createQueryBuilder('english');
$qb->where('english.date BETWEEN :startDate AND :endDate')
->andWhere('english.Categorie IN (:categories)')
->leftjoin('english.tags', 't')
->andWhere('t.id IN (:tags)')
->setParameters(array('startDate' => $startDate, 'endDate' => $endDate,
'categories' => $categorie->getId(), 'tags' => $tags))
;
事实上,大多数SQL都有一个本机年份函数,但Doctrine并没有实现它。您可以安装以便使用。您好-当您执行
$date->format('Y')
时会发生什么情况?我应用了它,没有遇到任何问题,但它不会向我发送要显示的结果(我希望按年份搜索出版物,而不是按完整日期(年、月、日))搜索出版物)