2017-02-20 77 views
0

У меня есть таблица под названием Bookings, со следующими атрибутами:CakePHP 3 - искатель не загружая правильные данные

  • id
  • artist_id - внешний ключ
  • status
  • amount
  • created
  • modified

Это связано с таблицами Artists, Payments и Sessions.

В представлении, я использовал плагин DataTables 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 моя последняя запись, которую я ввел сегодня, показывает Session.date_end, заполненную в формате YYYY-MM-DD, как и все записи, которые ее выполняли.

+0

Второй вариант должен работать нормально, учитывая, что ваш 'date_end' столбец устанавливается правильный тип DATE/TIME. – ndm

ответ

0

Попробуйте эту строку вместо

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

Примечание: использовать точный случай слово для функций, date вместо DATE

+0

Это сделало трюк. Я попытался что-то подобное ему (используя «Y-m-d»), но на «date_end», который в итоге дал мне синтаксические ошибки, так как он также использует инвертированные запятые. – mistaq