【问题标题】:CakePHP 3 - finder not loading correct dataCakePHP 3 - 查找器未加载正确的数据
【发布时间】:2017-02-20 06:09:30
【问题描述】:

我有一个名为Bookings 的表,具有以下属性:

  • id
  • artist_id - 外键
  • status
  • amount
  • created
  • modified

它与表ArtistsPaymentsSessions 相关联。

在View中,我使用了jQuery插件DataTables来显示Bookings,满足以下条件:

  • 他们的status等于'确认'
  • 关联表Session's属性date_end必须大于当前日期。

但是,第二个条件似乎不起作用,因为当存在满足该条件的数据条目时,它不返回任何内容。

在我的控制器中,此特定表的相应查找:

$bookingsConfirmed = $this->Bookings->find('all',[
            'contain' => ['Sessions', 'Sessions.Studios', 'Sessions.Engineers', 'Artists'],
            'conditions'=>['status' => 'confirmed', 'Sessions.date_end >=' => DATE(Time::now())],
            'order'=>['Bookings.created'=>'ASC']
        ]);

我已尝试对条件进行以下更改,所有这些都没有显示出显着差异:

  • date_end >=' => DATE(Time::now())
  • 'Sessions.date_end >=' => Time::now()
  • 'date(Sessions.date_end) >=' => DATE(Time::now())
  • 'date(Sessions.date_end) >=' => date(DATE(Time::now()))

如果我将 >= 符号切换为

在 SQL 日志中,这是该特定表的输出:

SELECT 
  Bookings.id AS `Bookings__id`, 
  Bookings.artist_id AS `Bookings__artist_id`, 
  Bookings.status AS `Bookings__status`, 
  Bookings.amount AS `Bookings__amount`, 
  Bookings.created AS `Bookings__created`, 
  Bookings.modified AS `Bookings__modified`, 
  Sessions.id AS `Sessions__id`, 
  Sessions.booking_id AS `Sessions__booking_id`, 
  Sessions.studio_id AS `Sessions__studio_id`, 
  Sessions.engineer_id AS `Sessions__engineer_id`, 
  Sessions.guestengineer_id AS `Sessions__guestengineer_id`, 
  Sessions.date_start AS `Sessions__date_start`, 
  Sessions.date_end AS `Sessions__date_end`, 
  Sessions.starttime AS `Sessions__starttime`, 
  Sessions.hours AS `Sessions__hours`, 
  Sessions.session_genre AS `Sessions__session_genre`, 
  Sessions.no_people AS `Sessions__no_people`, 
  Sessions.studio_usage AS `Sessions__studio_usage`, 
  Sessions.otherpeople_req AS `Sessions__otherpeople_req`, 
  Sessions.special_req AS `Sessions__special_req`, 
  Sessions.created AS `Sessions__created`, 
  Sessions.modified AS `Sessions__modified`, 
  Studios.id AS `Studios__id`, 
  Studios.name AS `Studios__name`, 
  Studios.description AS `Studios__description`, 
  Studios.created AS `Studios__created`, 
  Studios.modified AS `Studios__modified`, 
  Engineers.id AS `Engineers__id`, 
  Engineers.user_id AS `Engineers__user_id`, 
  Engineers.eng_firstname AS `Engineers__eng_firstname`, 
  Engineers.eng_lastname AS `Engineers__eng_lastname`, 
  Engineers.eng_email AS `Engineers__eng_email`, 
  Engineers.eng_phoneno AS `Engineers__eng_phoneno`, 
  Engineers.eng_status AS `Engineers__eng_status`, 
  Engineers.rate AS `Engineers__rate`, 
  Engineers.created AS `Engineers__created`, 
  Engineers.modified AS `Engineers__modified`, 
  Artists.id AS `Artists__id`, 
  Artists.name AS `Artists__name`, 
  Artists.cp_id AS `Artists__cp_id`, 
  Artists.user_id AS `Artists__user_id`, 
  Artists.genre AS `Artists__genre`, 
  Artists.created AS `Artists__created`, 
  Artists.modified AS `Artists__modified` 
FROM 
  bookings Bookings 
  LEFT JOIN sessions Sessions ON Bookings.id = (Sessions.booking_id) 
  INNER JOIN studios Studios ON Studios.id = (Sessions.studio_id) 
  LEFT JOIN engineers Engineers ON Engineers.id = (Sessions.engineer_id) 
  INNER JOIN artists Artists ON Artists.id = (Bookings.artist_id) 
WHERE 
  (
    status = 'confirmed' 
    AND Sessions.date_end >= '20/2/17, 4:47 p02'
  ) 
ORDER BY 
  Bookings.created ASC

截至今天,应该有 3 个条目显示。我打印了Time::now 并得到了日期:

Cake\I18n\Time Object
(
    [time] => 2017-02-20T16:47:11+11:00
    [timezone] => 
    [fixedNowTime] => 
)

奇怪的是上周运行良好,提交表单仍然有效。例如,在 MySQL 中,我今天输入的最新条目显示 Sessions.date_end 已填写,格式为 YYYY-MM-DD,与之前的所有条目一样。

【问题讨论】:

  • 第二个变体应该可以正常工作,因为您的 date_end 列设置为正确的 DATE/TIME 类型。

标签: mysql cakephp cakephp-3.0 cakephp-3.x


【解决方案1】:

试试这一行

`date_end >=' => date('Y-m-d H:i:s', Time::now()->getTimestamp())`

注意:使用函数的确切单词大小写,date 而不是 DATE

【讨论】:

  • 成功了。我之前尝试过类似的东西(使用'Y-m-d'),但是在'date_end'上它最终给了我语法错误,因为它也使用了引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-18
相关资源
最近更新 更多