Eugene
В базе есть колонка с номером года?
нет, к сожалению, там только cdate_int где просто хранится время в timestamp
Eugene
В базе есть колонка с номером года?
если создать такую колонку и использовать её для удаления, то это вероятно решит эту проблему?
Максим
Как раз не надо такую колонку делать
Eugene
Хорошо)
Eugene
есть отдельные колонки для дня и месяца, но они повсюду используются и очень нужны
Максим
Просто в метод передашь примерно так 2018 => 2018
Максим
Первый параметр зачем там нужен? У него ключом является не колонка, а ее значение
Eugene
Максим
"FROM_UNIXTIME(cdate_int, '%Y')" => date("Y", $newsM->cdate_int)
Максим
Эта часть
Максим
Странная конструкция как по мне)
Максим
Но по идее она просто года сравнивает, и если они не совпадают, то строки не затрагиваются
Eugene
Но по идее она просто года сравнивает, и если они не совпадают, то строки не затрагиваются
ну да, в этом идея) мне нужен только конкретный год) это можно как то улучшить? извините за очевидные вопросы, просто мне в голову не приходит что можно тут исправить)
Eugene
Ну по идее этот запрос и удаляет все, что добавили перед этим. $newsM это что? Откуда берется?
$newsM = News::findOne(["id" => $id]); это запись из другой таблицы, ищет её по id
Eugene
берет её время и удаляет запись)
Eugene
А почему из другой таблицы? Интересно как
Максим
А дату можно без mktime делать, например, date('Y-m-d 00:00:00', time())
Максим
А почему из другой таблицы? Интересно как
Так может в $model попадает другая модель, а не та, которую ожидаешь
Eugene
Сейчас пофикшу, а то ерунда какая то
Максим
Сейчас пофикшу, а то ерунда какая то
И в запросе лучше не вычислять дату, заранее ее в переменную запиши, MySQL кеширует запросы
Eugene
А дату можно без mktime делать, например, date('Y-m-d 00:00:00', time())
не, нужна дата из базы, точная до секунд) а date мне такой точности не дает вроде)
Максим
не, нужна дата из базы, точная до секунд) а date мне такой точности не дает вроде)
Так я вон пример написал, как получить ровно полночь
Максим
Зачем хранить даты в разных форматах чтобы их потом конвертировать)
Максим
Храни в timestamp тогда between можно делать проще или указать дату без часов минут и секунд
Максим
Я про cdate_int
Виктор
Сохраняю просто: $model->validate(); $model->save();
save сам вызывает валидацию. Естественно, если аргумент отмены валидации не передан в save
Виктор
Eugene
Я про cdate_int
https://implode.io/zjznHG переписал последнюю функцию, не могли бы Вы подсказать, есть какие то очевидные замечания там? Мб упустил что то
Eugene
там просто несколько условий стоит)
Виктор
$newsM = News::findOne(["id" => $id]); Например
Eugene
а, пустоту передать нельзя, на клиенте проверка стоит, если не выбрано ничего, то кнопку "сохранить" нельзя нажать)
Виктор
А если 2 человека работает, один удалил, второй сохранил)
Виктор
Все передалось, но записи уже нет)
Eugene
Все передалось, но записи уже нет)
Чтобы бы Вы посоветовали в таком случае предпринять?
Максим
Чтобы бы Вы посоветовали в таком случае предпринять?
проверять, нашлась ли запись, и если нашлась, только тогда производить какие то действия. Иначе будет ошибка
Максим
вот эта часть тоже вызывает вопросы public function editItems() { $editNews = Yii::$app->request->post('ThisDay'); foreach ($editNews["news_name"] as $year => $name) { $result[] = $name; } return $result; } что будет, если $editNews не массив или в нем нет элемента с ключом news_name
Максим
всегда надо проверять данные перед использованием. Массив ли? если должно прийти число, сделай intval вместо $model = ThisDay::findOne(['id_news' => $id]); надо $id = intval($id); $model = ThisDay::findOne(['id_news' => $id]);
Максим
и в модели наверное не надо работать с реквестом. получай его в контроллере и передавай в модель. я про метод public function editItems()
Максим
вместо public function editItems() { $editNews = Yii::$app->request->post('ThisDay'); foreach ($editNews["news_name"] as $year => $name) { $result[] = $name; } return $result; } лучше на мой взгляд будет public function editItems($editNews) { $result = []; if(is_array($editNews) && isset($editNews["news_name"])) { foreach ($editNews["news_name"] as $name) { $result[] = $name; } } return $result; }
Максим
соответственно, проверять в методе validateEdit() пришел ли пустой массив или нет
Eugene
вот эта часть тоже вызывает вопросы public function editItems() { $editNews = Yii::$app->request->post('ThisDay'); foreach ($editNews["news_name"] as $year => $name) { $result[] = $name; } return $result; } что будет, если $editNews не массив или в нем нет элемента с ключом news_name
дело в том, что тут данные с представления "edit" в него нельзя попасть, если ты невыбрал хотя бы одну новость, соответсвенно, $editNews всегда массив, хотя бы с одной новостью и указанным ключом)
Максим
жуликов хватает, надо все перепроверять и юзерам не доверять)
Eugene
жуликов хватает, надо все перепроверять и юзерам не доверять)
это функционал для нашей админки, если кто то начнет таким заниматься, то получит по ушам уже лично от меня) но за советы огромное спасибо, сейчас исправлю все что смогу согласно Вашим рекомеднациям)
Константин
Объясните пожалуйста что я сделал не так что у меня выводится такая ошибка? - PHP User Error – yii\base\ErrorException EditController module does not exist
Максим
в тексте ошибки же написано. ищи где его подключал или где надо подключить, и подключи
Константин
Ну так я его не создавал никогда и сам его нигде не использую
Константин
in D:\OpenServer\OSPanel\domains\Yii2\vendor\ezyang\htmlpurifier\library\HTMLPurifier\HTMLModuleManager.php
Константин
Я его не подключал
Eugene
Я его не подключал
глянь полный стек ошибок
Константин
Это как?
Eugene
Это как?
ты где эту ошибку получаешь?
Константин
когда нажимаю Time
Константин
Memory
Константин
у меня просто один контроллер грузится непростительно долго
Eugene
когда нажимаю Time
Очень понятно))
Константин
Я пытаюсь выяснить причину
Константин
Максим
162 милисекунды это совсем не долго
Константин
тыркнул на значения 3 сек
Максим
покажи код profile/update
Константин
Это не он грузится долго
Максим
Это не он грузится долго
ошибка вызвана на этом роуте, значит начинать надо с него
Константин
Максим
покажи весь скрин с ошибками, ниже прокрути
Константин
https://pastebin.com/xDAjLzuz
Константин
Это код ProfileController
Константин
Константин
Так
Максим
$response = RestUpdate::restUpdate(Yii::$app->user->identity->email, Yii::$app->user->identity->address, Yii::$app->user->identity->apartment,Yii::$app->user->identity->lastName,Yii::$app->user->identity->firstName,Yii::$app->user->identity->thirdName, Yii::$app->user->identity->phone_number, Yii::$app->user->identity->login, $user->password, $user->individual); лютая дичь какая то. не проще в нем самом получать Yii::$app и раскидывать параметры? Надо будет потом поменять порядок, например, или добавить что-то, придется во всех методах менять
Константин
Это геморой
Константин