2017-02-20 70 views
0

我有一个名为Bookings表,具有以下属性:CakePHP的3 - 取景器不加载正确的数据

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

它与表ArtistsPaymentsSessions相关联。

在视图中,我已经使用了jQuery插件数据表显示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格式,就像所有进行它的条目一样。

+0

第二个变量应该工作得很好,因为你的'date_end'列设置为一个适当的日期/时间类型。 – ndm

回答

0

试试这个行,而不是

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

注:使用确切的词案例职能,而不是dateDATE

+0

这个技巧。我之前尝试过类似的东西(使用'Y-m-d'),但'date_end'最终给我语法错误,因为它也使用了引号。 – mistaq