【问题标题】:CakePHP 3 query all date in a date range from a tableCakePHP 3 从表中查询日期范围内的所有日期
【发布时间】:2017-08-05 16:10:15
【问题描述】:

我有一个名为Plans 的表,其中有period_fromperiod_to 列,它们是日期。

我有另一个名为Prices 的表,其中有一列date。我想通过与date 列匹配来了解Prices 表中是否存在从period_fromperiod_to 的所有日期。

到目前为止,我的代码看起来像这样。问题是即使日期范围内只存在一个日期,它也会给我结果。

$plans_table = TableRegistry::get('Plans');
$checkin = $this->request->data['checkin'];
$checkout = $this->request->data['checkout'];
$plans = $plans_table
    ->find()
    ->contain([
        'Prices' => function($q) {
            return $q->where([
                'Prices.date >=' => $checkin,
                'Prices.date <=' => $checkout
            ]);
        }
    ]);

CakePHP 3.4.12 版

【问题讨论】:

  • 欢迎来到 StackOverflow。发布代码时,请确保其格式清晰,并且可以正常工作(就有效语法而言,除非这是实际问题)-您显示的是无效语法,这可能会使读者感到困惑。另外请务必提及您的 确切 CakePHP 版本(vendor/cakephp/cakephp/VERSION.txt 中的最后一行) - 谢谢!
  • PricesPlans是什么关系?另外,您能否提供一个示例来说明您要实现的目标?

标签: cakephp associations query-builder date-range cakephp-3.x


【解决方案1】:

说实话,我对你的问题感到困惑。无论如何,这可能有你的问题。您想在period_fromperiod_to 之间找出答案。在这种情况下,您可以这样做;

  'Prices.date BETWEEN ? AND ?' => [$checkin, $checkout]

如果您希望您的$checkin,$checkout 日期与$date 完全相同,我会这样做;

  $dateArray = [$checkIn,$checkout]; //['yyyy-mm-dd','yyyy-mm-dd']
  ['Prices.date' => $dateArray] //meaning IN (checkin,checkout)

希望你所有的date 列数据类型都是date。如果数据类型为datetime,则此代码将不起作用。如果我误解了你的问题,请告诉我。将为您更新答案。

【讨论】:

  • 您好,感谢您添加答案。我想要实现的是$checkin$checkout 之间的所有日期。例如,如果$checkin 日期是 2017-08-15 并且结帐日期是 2017-08-17,我想确保此范围内的所有日期(2017-08-15、2017-08-16、2017- 08-17) 是否存在于Prices.date 列中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
相关资源
最近更新 更多