Добрых времен суток, пишу свой модуль, и удачно работает , но! решил связаться с базой , и используя строгий канон MVC движка... собственно таблица oc_color: Код (Text): +-----+-------+---------+---------------+ | id ~ | color | price | data_mod | +-----+-------+---------+---------------+ | 24 | red | 20.048 | 03.03. 2022| | 25 | gre | 17.045 | 03.03. 2022| | 26 | yel | 13.054 | 03.03. 2022| ................. | 105 | red | 20.038 | 25.02. 2023| | 106 | gre | 19.045 | 25.02. 2023| | 107 | yel | 15.068 | 25.02. 2023| | 108 | red | 20.068 | 26.02. 2023| | 109 | gre | 18.045 | 26.02. 2023| | 110 | yel | 14.058 | 26.02. 2023| ................. | 118 | red | 20.068 | 03.03. 2023| | 119 | gre | 18.045 | 03.03. 2023| | 120 | yel | 14.058 | 03.03. 2023| и в разделе Model я создаю файл model/color.php PHP: class ModelExtensionDashboardChartColor extends Model { public function getTotal_per_red_ByMonth() { $data = array(); for ($i = -5; $i < 1; $i++) { $date = date('d.m.Y' ,strtotime ("$i days")); $data = $this->db->query("SELECT price FROM oc_color WHERE code='red' AND data_mod='". $date ."' "); } return $data; } по логике sql я должен был получить за определенный период (5 дней) значения колонки price как массив, но! в контролере controler/color.php делая запрос к модели PHP: $data[] = $this->model_extension_dashboard_сhart_сolor->getTotal_per_red_ByMonth(); //на всякий, смотрим что прибежало var_dump ($data) ; и какой-то не внятный ответ, прошу прощения принт скрином , почему-то не могу прикрепить ?
слово json в ошибке? ищи где ты работаешь с json. внезапно™ сам. а делаешь цикл на 6. скажи что ты не хранишь дату в текстовом поле, пожалуйста! ну нет ведь?... дата в sql представляется как YYYY-MM-DD когда начнешь использовать правильные типы данных, сможешь делать запросы с >, < и BETWEEN которые работают! а также сможешь пользоваться специальными функциями mysql для работы с датой-временем. https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html --- Добавлено --- P.S. копируй текст ошибки как текст. это неуважение когда заставляешь людей куда-то кликать и что-то набивать руками, когда они могли бы скопировать-вставить
это в контролере он передает ажаксом в twig в javascript массив для графика ваша правда после заметил, и исправил я в курсе формата у меня и запись есть в спец файле php для cron PHP: date_default_timezone_set("Europe/Chisinau"); $dat = date("Y-m-d H:i:s", time()); //формат времени MySQL $date = date('d.m.Y');// но этот формат мне удобен был когда я не работал с базой а на прямую 1095 запросов кидал на удаленный сервер ну дату откоректировать и секунды не вопрос: экспорт базы -> блокнот -> regexp -> импорт в зад --- Добавлено --- Да я бы с удоволиствием но движок передает в модальном окне все ошибки через alarm после json передачи из контролера , у меня инструменты разработчика даже не доступны из-за модального окна с кнопкой ОК. я же прям в браузере пилю и в нотепаде )))
ну и читО, ну перевел я колонку data_mod к правильному типу date Код (Text): +-------+----------+----------+-------------+ | id ~ | color | price | data_mod | +-----+--------+----------+--------------------+ | 24 | red | 20.048 | 2022-03-03 | | 25 | gre | 17.045 | 2022-03-03 | | 26 | yel | 13.054 | 2022-03-03 | ................. | 105 | red | 20.038 | 2023-02-25 | | 106 | gre | 19.045 | 2023-02-25 | | 107 | yel | 15.068 | 2023-02-25 | | 108 | red | 20.068 | 2023-02-26 | | 109 | gre | 18.045 | 2023-02-26 | | 110 | yel | 14.058 | 2023-02-26 | ................. | 118 | red | 20.068 | 2023-03-03 | | 119 | gre | 18.045 | 2023-03-03 | | 120 | yel | 14.058 | 2023-03-03 | и мой запрос через модуль PHP: public function getTotal_per_red_ByMonth() { date_default_timezone_set("Europe/Chisinau"); $date = date('Y-m-d'); $date_per = date('Y-m-d' ,strtotime ("-30 days")); $query =$this->db->query("SELECT price FROM oc_color WHERE data_mod BETWEEN '" . $date . "' AND '" . $date_per . "' AND color NOT IN ('gre','yel') order by id "); return $query ; } и делаю запрос в контролере PHP: $json['results'][] = $this->model_extension_dashboard_chart_color->getTotal_per_red_ByMonth(); print_r($json['results']); и пустые Array вывод : Array ( [0] => stdClass Object ( [num_rows] => 0 [row] => Array ( ) [rows] => Array ( ) ) )
Запрос выглядит правдоподобно. Надо отлаживать код, проверять как в точности этот запрос сработает в phpmyadmin или что ты используешь для доступа к БД... --- Добавлено --- Я сделал замечания к косякам которые вижу, но заниматься мелкой отладкой не хочу, извиняй
Нужно поменять местами $date и $date_per PHP: public function getTotal_per_red_ByMonth() { date_default_timezone_set("Europe/Chisinau"); $date = date('Y-m-d'); $date_per = date('Y-m-d' ,strtotime ("-30 days")); $query =$this->db->query("SELECT price FROM oc_color WHERE data_mod BETWEEN '" . $date_per . "' AND '" . $date . "' AND color NOT IN ('gre','yel') order by id "); return $query ; }
благодарю за точный совет, есть мой косяк данные начали приходить, но почему-то не за три последних дня , а ровно за последние 3 дня и месяц))) моя не внимательность, все встало на места после уточнения в запросе PHP: // ... order by data_mod "); Вы сделали больше, вы правильно направили меня!