Задать вопрос
  • Создание классов в цикле?

    @Vitsliputsli
    Павлуша, можно, добавьте цикл и укажите, что файл нужно дописывать, и тег php придется вынести из шаблона.
    Напоминаю, хранение нескольких классов в одном файле нарушает стандарт автозагрузки PSR. А, если сгенерированные классы действительно будут отличаться только именем, то это очень странная идея.
  • Readonly и объект?

    @Vitsliputsli
    Павлуша, чтобы гарантировать, что вместо внедренного объекта вдруг не появится другой.
    Другой пример, у вас есть некоторое значение, которое бы надо объявить константой, но оно либо вычисляется, либо берется из конфига, и константой будет только во время существования объекта. Добавив readonly вы таким образом обозначаете, что ничто не должно менять данную переменную после инициализации.
  • Где ошибка в запросе?

    @Vitsliputsli
    Константин Цветков, точно, не заметил.

    Korifa, если сгенерированный sql выполняется, значит вопрос не в том, как он генерируется, а как исполняется или ограничениях команды исполнения.
  • Где ошибка в запросе?

    @Vitsliputsli
    Соберите запрос и посмотрите на него. Два ON подряд - явная ошибка
  • Как преобразовать двумерный массив в строку с помощью sql?

    @Vitsliputsli
    Новоселов Андрей, кстати да, это json и можно просто его распарсить, как в соседнем ответе. Regexp здесь не нужен, да и сложнее с ним будет значительно.
  • Регистр для ключей JSON?

    @Vitsliputsli
    XG22,
    Но один коллега упёрся рогом, что использование snake_case является правилом хорошего тона, а camelCase - плохо. Но никаких пруфов, где я смог бы прочитать, что вот так - хорошо, а так - плохо, он так и не предоставил.

    Доказывать должен утверждающий, иначе ситуация как у вас, кто-то что-то сказал не аргументируя, а вы теперь землю роете, дабы доказать. Тут уже не вопрос cases, а вопрос, что у вас за "звезда" в команде, что вокруг нее нужно бегать.
    "анализ публичных api разных сервисов показывает, что единого подхода нет" - именно так. Да и проблема именования имен несколько об ином, а здесь и не проблема вовсе.
    И, главное, используйте хоть оба варианта, там не нужно никаких мапперов, один case в другой конвертируется 2-3 строчками кода.
  • Почему не доходит письмо при отправке с помощью PHPMailer?

    @Vitsliputsli
    PHP само не отправляет письма, он не умеет, он использует внешнюю утилиту которая указывается в настройках php.ini - sendmail_path => /usr/sbin/sendmail -t -i

    Не совсем так, внешнюю утилиту использует php-функция mail, автор же использует библиотеку PHPMailer которая самостоятельно реализует независимый SMTP-клиент.
    Что касается логов, то ошибка вызовет Exception, который если не отлавливается, будет записан в php-шный лог.
  • Добавление свойства без объявления свойства?

    @Vitsliputsli
    Павлуша, ничего не заменило, от них отказались, как от плохой практики. Все свойства должны быть описаны в классе. В исключительных случаях можно воспользоваться магическими методами, но обычно и этого не нужно.
  • Как документировать аргументы метода-прослойки?

    @Vitsliputsli
    Многоточие - это для ситуации, когда не знаем, точное кол-во аргументов. Здесь это не нужно.
  • Какой тип для денежных данных?

    @Vitsliputsli
    zvlad_vitamin, все так, пока оно в базе, но вам ведь в php с ним работать, а в php такого типа нет, а значит нужно будет полученную из MySQL строку с точкой конвертить в php int, и опять же работать с int, а при записи в базу опять из int конвертить в decimal.
    А, если не int, а прямо строкой оперировать, то придется использовать bcmatch, как указал toxa82, а арифметика чисел произвольной точности не очень удобное и не очень быстрое решение.
  • Как оптимизировать 1000 одновременных update строки?

    @Vitsliputsli
    Александр, посмотрите как выполняется select по update, если там все быстро, а скорее всего так и есть, то проблема именно в блокировках. В этом случае шардирование не спасет.

    редис и nosql методы мы используем, но в данном случае никак. только через базу.

    странное утверждение. не все и всегда можно сделать через базу. Да и не нужно скорее всего, многократный апдейт одного и того же это очень странное поведение, и не факт что оно нужно для решения неизвестной задачи.
    Если СУБД имеет нормальное железо и нам требуется чтобы она выдерживала высокую нагрузку. То, как минимум проверьте используемые индексы, unique и foreighn keys, быть может возможно от них отказаться. Как максимум, продумать неблокирующую схему работы, например разбить эту одну обновляемую строку на несколько строк предназначенных разным запросам, поделить общий remains на несколько, тогда на начальных этапах разные запросы будут обновлять разные строки и не будет блокировок, когда remains уменьшится, то все равно будт обращаться к одним и тем же. Здесь мы потеряем в скорости select, но зато избежим блокировок на начальных этапах, если конечно remains достаточно большой. Но, все это очень усложнит работу, да и схему надо проверять, не зная других составляющих не факт, что это чтото даст,.
    И, гораздо проще запихнуть это в Redis, и работать в нем, как ни крути он не пишет одно и то же по 4 раза, а если упираемся в запись на диск, то это оптимальное решение.
  • Как правильно использовать redis?

    @Vitsliputsli
    Редис также может сохранять данные на диск, хоть по времени, хоть постоянно. Но, в принципе, правильно, сперва сделайте с обычной СУБД, а если уж возникнет потребность добавите кеширование.
  • Как оптимизировать 1000 одновременных update строки?

    @Vitsliputsli
    Очень похоже на проблему XY. Без описания реальной задачи решить вряд ли получится.
    И данных все равно мало, даже если неверно выбрана задача. Например, непонятно что конкретно тормозит? Обновление данных или выборка?
    Отсюда неизвестно, что поможет. Быть может нужно шардирование, а может нужно кеширование в каком-нибудь Редис.
  • Почему скрипт PHP PDO не хочет получать данные из базы?

    @Vitsliputsli
    rPman, а чем поможет использование числа вместо даты sql? Использование числа лишь привнесет необходимость преобразования его в дату вручную, а проблему, что автору нужно искать по дате, а данные хранятся с точностью до секунды не решит.

    И, к слову, если выбирать вариант использования функции вырезающей дату в поисковом запросе, то нужно проверить позволяет ли СУБД строить индексы по функциям.
  • Как настроить phpmyadmin на Ubuntu 22.04 для работы с php7.4?

    @Vitsliputsli
    Иван, ну и отлично. Собственно вы из оригинального архива и установили. Я бы точнее не подсказал, все что писал выше, это чисто по тому что вижу в архиве phpmyadmin и пакете Ubuntu, сам их не устанавливал.
  • Как настроить phpmyadmin на Ubuntu 22.04 для работы с php7.4?

    @Vitsliputsli
    Иван, проблема во внешнем компоненте, phpmyadmin вообще не переходил еще на php8.
    phpmyadmin зависимости поставляет вместе со своим кодом, но похоже ребята из Ubuntu решили "оптимизировать", поэтому они зависимости устанавливают сами, да еще и в общую директорию /usr/share/php/. В итоге, когда вы ставили пакет Ubuntu, composer был запущен от php8, соответственно он и поставил зависимости для него.
    Не скажу точно, что там Ubuntu наделали, но нужно каким-то образом назначить по-умолчанию php7, вероятно достаточно сделать линк /usr/bin/php на /usr/bin/php74, но не уверен. И заново установить пакет phpmyadmin.
    Либо просто скачать оригинальный phpmyadmin, а не убунтовский пакет.
  • Почему PHP не видит класс через namespace??

    @Vitsliputsli
    sherzad_90, в 4 строке вы подключаете require __DIR__ . '/src/MyProject/Models/Articles/Article.php';
    внутри есть определение класса class Article extends ActiveRecordEntity. Т.е. расширяем от класса ActiveRecordEntity, php будет искать этот класс, но он еще не загружен, т.к. загрузкой его занимается функция объявленная в spl_autoload_register, а это произойдет только в 6 строке.
    Проще говоря, переместите spl_autoload_register в начало файла.
  • Почему PHP не видит класс через namespace??

    @Vitsliputsli
    sherzad_90, у вас класс Article ссылающийся на класс ActiveRecordEntity, который нужно загрузить, объявлен в 4 строке, а автозагрузчик только в 6.
  • Самая простая конструкция с собственной областью видимости?

    @Vitsliputsli
    Василий Банников, все равно это будет функция, а блок кода со своим контекстом лишь синтаксический сахар. Да и логически ценность не очень понятна, если этот блок независим, вынесение его в отдельную функцию только улучшит читаемость текста. А если в блоке только одна переменная, проще ее создать там же и там же уничтожить.
    Поэтому и цель автора мне не понятна.
  • Что эффективнее использовать: SELECT COUNT или rowsCount() (PDO)?

    @Vitsliputsli
    Как уже верно указано, rowsCount в PDO это совсем про иное. Просто в коде посчитайте кол-во строк и все.
    Если же говорить про mysql_num_rows из статьи, то там тоже странные вещи написаны. mysql_num_rows считает кол-во строк в уже полученном наборе, т.е. СУБД уже обработала запрос и вернула результат. По сути, вы с тем же успехом можете и сами посчитать сколько строк в полученном результате.