企业建设网站网站建设公司,网页制作设计思路和过程描述,传统网站怎么换成WordPress,最强国产系统发布PHP-在学说2中的日期之间选择条目我将因这个无法修复的最小错误而发疯。 我想在两天之间选择条目#xff0c;下面的示例说明了我所有的失败#xff1a;选择1。$qb-where(e.fecha . $monday-format(Y-m-d));$qb-andWhere(e.fecha . $sunday-forma…PHP-在学说2中的日期之间选择条目我将因这个无法修复的最小错误而发疯。 我想在两天之间选择条目下面的示例说明了我所有的失败选择1。$qb-where(e.fecha . $monday-format(Y-m-d));$qb-andWhere(e.fecha . $sunday-format(Y-m-d));结果(0个条目)SELECT r0_.id_reservacion AS id_reservacion0, r0_.fecha AS fecha1, r0_.cliente AS cliente2FROM reservacion r0_WHERE (r0_.fecha 2012 - 07 - 16) AND (r0_.fecha 2012 - 07 - 22)选择2$qb-add(where, e.fecha between 2012-01-01 and 2012-10-10);结果(0个条目)SELECT r0_.id_reservacion AS id_reservacion0, r0_.fecha AS fecha1, r0_.cliente AS cliente2FROM reservacion r0_ WHERE r0_.fechaBETWEEN 2012 - 01 - 01 AND 2012 - 10 - 10这是我带有当前条目的表id fecha cliente1 2012-07-16 00:00:00 22 2012-07-16 13:00:00 43 2012-07-22 23:00:00 4编辑1为了评估sql以免产生疑问我运行了以下查询$qb-where(e.fecha . $sunday-format(Y-m-d));结果(3个条目)SELECT r0_.id_reservacion AS id_reservacion0, r0_.fecha AS fecha1, r0_.cliente AS cliente2因此看起来不是sql的问题。 从保留r0_ 在r0_.fecha 2012-074个解决方案137 votes您可以…$qb-where(e.fecha BETWEEN :monday AND :sunday)-setParameter(monday, $monday-format(Y-m-d))-setParameter(sunday, $sunday-format(Y-m-d));要么…$qb-where(e.fecha :monday)-andWhere(e.fecha :sunday)-setParameter(monday, $monday-format(Y-m-d))-setParameter(sunday, $sunday-format(Y-m-d));MacDada answered 2020-02-06T14:24:25Z32 votes我相信这样做的正确方法是使用查询生成器表达式$now new DateTime();$thirtyDaysAgo $now-sub(new \DateInterval(P30D));$qb-select(e)-from(Entity,e)-add(where, $qb-expr()-between(e.datefield,:from,:to))-setParameters(array(from $thirtyDaysAgo, to $now));[http://docs.doctrine-project.org/en/latest/reference/query-builder.html#the-expr-class]编辑此方法相对于此处任何其他答案的优点是它独立于数据库软件-您应该让Doctrine处理日期类型因为它具有处理此类问题的抽象层。例如如果执行类似以Y-m-d形式添加字符串变量的操作则该变量在转到MySQL以外的数据库平台时会中断。Harry Mustoe-Playfair answered 2020-02-06T14:25:00Z3 votes编辑请参阅其他答案以获得更好的解决方案我提供的原始新手方法是(opt1)$qb-where(e.fecha . $monday-format(Y-m-d) . );$qb-andWhere(e.fecha . $sunday-format(Y-m-d) . );和(opt2)$qb-add(where, e.fecha between 2012-01-01 and 2012-10-10);这样既快捷又容易使原始海报立即生效。因此可以接受的答案。根据评论这是一个错误的答案但这是一个容易犯的错误因此我将其作为“不可以做的事”留在这里。azhrei answered 2020-02-06T14:25:42Z1 votes看看如何在参数中格式化日期$ jour。这取决于您使用的是expr()- like还是expr()- lte$qb-select(e)-from(LdbPlanningBundle:EventEntity, e)-where($qb-expr()-andX($qb-expr()-orX($qb-expr()-like(e.start, :jour1),$qb-expr()-like(e.end, :jour1),$qb-expr()-andX($qb-expr()-lte(e.start, :jour2),$qb-expr()-gte(e.end, :jour2))),$qb-expr()-eq(e.user, :user)))-andWhere(e.user :user )-setParameter(user, $user)-setParameter(jour1, %.$jour-format(Y-m-d).%)-setParameter(jour2, $jour-format(Y-m-d))-getQuery()-getArrayResult();Laurent Lolo answered 2020-02-06T14:26:02Z