Необходимо выбрать записи по дате публикации без учета времени. Классический запрос будет таким:
SELECT * FROM cms_con_posts ccp
WHERE DATE_FORMAT(ccp.date_pub, '%d.%m.%Y')='04.10.2018'
Как это реализовать с помощью методов модели? Вырисовывается что-то типа такого:
$item = $this->filterEqual('date_pub', '04.10.2018')->getItem('con_posts');
Но тип поля TIMESTAMP и содержит время, как его откинуть?
Это если не гуглить.
А так идем в файл поля date.php и подсматриваем в методе applyFilter
З.ы. Это двойка, тут решение есть всегда
Вопрос как раз в том, как через модель привести данные к нужному формату, например строковому, чтобы записи попали в выборку, как здесь:
SELECT * FROM cms_con_posts ccp
WHERE DATE_FORMAT(ccp.date_pub, '%d.%m.%Y')='04.10.2018'
а так получаем
SELECT i.*
FROM cms_con_posts i
WHERE (i.date_pub BETWEEN '04.10.2018' AND '05.10.2018')
LIMIT 1
и пустой результат, т.к. поле date_pub в формате TIMESTAMP и содержит помимо даты еще и время
00:00:00 и 23:59:59 дорисовал, но не спасло :(
$item = $this->filterDateYounger('date_pub', '2018-10-03')->filterDateOlder('date_pub', '2018-10-05')->getItem('con_posts');
$item = $this->filterDateYounger('date_pub', '2018-10-03')->filterDateOlder('date_pub', '2018-10-05')->getItem('con_posts');
УТОЧНЕНИЕ.
filterDateYounger и filterDateOlder работают с датой через INTERVAL и формат '2018-10-05' здесь не уместен.
Если нужен промежуток между датами, то лучше так
$items = $model->filterBetween($date_field, $first_date, $last_date)->getItem($table_name); или $items = $model->filterBetween($date_field, '2018-10-03', '2018-10-05')->getItem('con_posts');
А что, в модели компонента написать метод с запросом и обращаться к нему, чем велосипеды изобретать, религия не позволяет)?