• Как получить все модели по глубоко-вложенной связи?

    iMedved2009
    @iMedved2009
    Не люблю людей
    public functions questions(){
    
            $instance = $this->newRelatedInstance(Question::class);
            $localKey = $this->getKeyName();
            $query = $instance->newQuery()
                 ->join('test_question', 'test_question.question_id', '=', 'questions.id')
                 ->join('tests', 'tests.id', '=', 'test_question.test_id')
                 ->join('lessons', 'lessons.id', '=', 'tests.lesson_id')
                 ->join('modules', 'modules.id', '=', 'lessons.module_id')
    
            return $this->newHasMany(
                $query, $this, 'modules.course_id', $localKey
            );
    }
    Ответ написан
  • Как заставить PHP обрабатывать строку, игнорируя управляющие последовательности?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    PHP не нужно заставлять игнорировать управляющие последовательности в переменных. Потому что он их и так игнорирует.

    Вопрос действительно "тупой". И причём путаница тут уже в самом начале.
    Утверждение
    Если я не создаю строковую переменную как литерал в коде, а беру из файла или GET-запроса и т. д., то функциями в PHP она обрабатывается как строка в двойных кавычках.

    является неверным.

    Надо всегда проверять свои предположения на практике.
    То есть на самом деле вся проблема сводится к тому, что ещё до попадания в переменную $_GET['text'], текст был сконвертирован. В случае же, если в адресной строке будет передано значение \xbc, то оно и будет в переменной и прекрасно запишется в базу

    Есть вероятность, что в переменную приезжает один символ, но в кодировке utf-8. И strlen честно показывает длину в несколько байт, что добавляет путаницы ещё больше.
    Ответ написан
    Комментировать
  • Зачем надо закрывать курсор при работе с БД?

    mayton2019
    @mayton2019
    Bigdata Engineer
    Дело в том что курсор может потреблять ресурсы. Например вы захотели взять первые 10 строк из 10000000 выборки но предварительно отсортировали. Выбрали 10 строк и не сделали финализирующие протокольные действия в Python. База данных будет удерживать в памяти алгоритмы и структуры данных для снапшота результата этого запроса до тех пор пока не придет явный CLOSE с вашей стороны либо интеллекуальный драйвер который еще и обладает логикой уборки мусора сам не догадается что Statement уже вышел из scope вашего использования и может быть удалён GC.

    Я был свидетелем ситуации когда крупное ent-приложение Java/Oracle переполняло память из-за неверной обработки Exception и плодила много незакрытых курсоров в БД. Java от этого не сильно страдала (GC всё убирал) но страдал Oracle. Потому что уборка происходила слишком поздно. Пофиксилось тогда переписыванием с try на try-with-resources.

    Поэтому если вы неряшливо обращаетесь с курсорами (явными и неявными (обычный select к примеру может прождать неявный курсор)) то не ваше приложение а база данных почувствует себя плохо. Как быстро и какие ошибки вы будете получать - зависит от настроек вашей БД.
    Ответ написан
    Комментировать
  • Насколько актуален чистый PHP?

    php666
    @php666
    PHP-макака
    Отвечу как автор того самого обширного ответа.

    Первое. В голове у тебя тотальное непонимание. Вопрос твой звучит примерно так же, как "можно ли быть хирургом не зная анатомию человека и не закончив 5 лет мед института?". Естественно нет.

    Есть ли сейчас смысл в оттачивании чистого PHP
    Язык всегда первичен. Да.

    Далее. Вот эта фраза
    если мне +- хватает понимания, как работает та же Ларавел?
    Ты серьезно думаешь, что у тебя "хватает понимания", как работает фреймворк? Больше не повторяй вслух эти слова. Никогда. Особенно на собеседовании. Иначе собеседующие тебя похоронят за плинтусом.

    Может, при возможности стоит обратить внимание на другой язык(Го, шарп, нода)?
    Сегодня разговаривал с HR-ом, дословно: php-шников и фронтов много. Больше остальных. Спрос на другие языки - go и питон - там низкая конкуренция. Не могу ей не поверить, т.к. php существует более 20 лет и за это время в отрасль вкатилась куча людей. Откровенно говоря, очень скоро значительный % пхп-макак пойдет в такси, включая меня. Конкуренция, судя по собеседованиям - адовая. Спрашивают сам язык и ещё 250 сопутствующих технологий.

    не рискую пока идти на собеседования потому что хочу закрыть чеклист: несколько проектов в портфолио на чистом PHP, laravel; подучить JS с Аяксом; Добить тестирование, а также чуть разобраться с докером, линуксом и теоретической частью этих ваших интернетов.
    мертвому припарка. Ты никогда в "домашних условиях" не получишь боевой опыт. Лучше иди работай за "ничего", больше пользы будет.
    Ответ написан
    1 комментарий
  • Как узнать что запрашивает права суперпользователя?

    vesper-bot
    @vesper-bot
    Любитель файрволлов
    tail /var/log/audit/audit.log - в том файле собираются все запросы подъема прав (и ещё куча всего, советую помониторить), получить PID этого шелла, потом ps -ef найти по цепочке кто запустил. Это правда из-под рута, и выполнять проверку нужно с висящим окном запроса рутовых привилегий.
    Ответ написан
    Комментировать
  • Как не пропускать css клас в комит?

    Aetae
    @Aetae
    Тлен
    Дёшево и сердито: пре-коммит хук, который простым grep-ом ищет это имя класса и не даёт коммитить если находит.)
    Ответ написан
    Комментировать
  • Попинайте. Работодатель сказал, что у меня код PHP устаревший. В чем именно проблемы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    В общем да, на первый взгляд этот код производит ужасное впечатление
    Тут даже не 2010-е, тут скорее 1990-е

    По пунктам
    - конструктор, совпадающий с именем класса, уже отсутствует в языке
    - в конструктор передается бессмысленная переменная дб, которая нигде не используется
    - функции вида formField() - это явно какой-то адок и инъекции
    - про mysql_query уже сказали
    - про собаку уже сказали. причём она здесь не нужна, mysql_query практически не выдаёт ошибок
    - die ( mysql_error () ); - это вообще зашквар. Я кстати однажды наблюдал результат похожего кода на тостере много лет назад, хе-хе. На боевом сайте системные сообщения об ошибках никогда не должны выводиться в браузер. Вообще, это родовая ошибка похапешников, сохранившаяся до наших дней - у них все ошибки в обязательном порядке обрабатываются здесь и сейчас. В то время как код приложения должен только выбросить ошибку, а обрабатываться все ошибки должны централизованно, в другом месте.

    Однако есть и хорошее.
    Сам по себе класс неплохой, и довольно грамотный ООП в целом.
    пожалуй, надо только подправить синтаксис, и задействовать какой-нибудь осмысленный объект $db, чтобы запрос выполнялся как-то так

    function addPlace($place) {
        $query = "INSERT INTO place
            (name,english, countryID, globalRatingID, typeID, worldPartID, datecreated,
            datelastmodified,datepublished,permissionLevel,tansliterated)
            VALUES (
            (:name,:english, :countryID, :globalRatingID, :typeID, :worldPartID, now(),now(),
            now(),:permissionLevel,:tansliterated)";
        $this->db->query($query, [
            'name' => $place->getName(),
            'english' =>$place->getEnglish(),
            // и так далее, всё массивом
        ]);
        return true;
    }
    Ответ написан
    2 комментария
  • Попинайте. Работодатель сказал, что у меня код PHP устаревший. В чем именно проблемы?

    Stalker_RED
    @Stalker_RED
    @mysql_query() уже одного этого кусочка хватает для того, чтобы сильно усомниться в скиллах.

    Функция mysql_query устарела более семи лет назад, и в современных версиях языка ее вообще нет.
    Подавление ошибок через @ - вообще шедевр. У вас, значит, запрос с ошибкой, или база упала - но ваш код это просто игнорирует и делает вид, что так и надо. Зашибись :)

    Читайте https://phptherightway.com/
    Ответ написан
    Комментировать
  • Расписание клуба в blade шаблоне?

    glaphire
    @glaphire
    PHP developer
    Стоит вынести подготовку этих данных в экшен контроллера (а чтобы не перегружать экшен, то вынести эти фильтры в приватные методы или вообще отдельный сервис), тогда в шаблоне будет простой вывод данных. @php в блейде это крайняя мера)) в других шаблонизаторах такие конструкции запрещены
    Ответ написан
    3 комментария
  • Стек MEAN ( Можно ли заменить MongoDB на MySQL )?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер
    нет никакого стека MEAN. Это просто свободно заменяемый набор инструментов, причем монгу вообще нет смысла брать. И родилась эта аббревиатура еще во времена первого ангуляра и вырвиглазной ноды, еще до nest.js и тайпскрипта.
    Все мануалы того периода сейчас уже нельзя воспринимать всерьез.
    Ответ написан
    3 комментария
  • Как отключить кнопку "купить", на которую было произведено нажатие?

    erniesto77
    @erniesto77
    oop, rb, py, php, js
    процесс такой
    1 нажатие
    2 api запрос
    3 делаешь кнопку не кликабельной
    4 получаешь ответ от api
    5 возвращаешь кнопке кликабельность

    а тот пример который вы привели, вы просто скопипастили откуда то. Включайтесь в процесс мышления, иначе нет смысла заниматься этим
    Ответ написан
    1 комментарий
  • Как запретить открытие второй вкладки?

    @antonwx
    Самый надёжный вариант - позволять открывать вторую вкладку, при этом отключать все предыдущие. Например для каждой вкладки генерировать уникальный id (при запросе показа страницы) и позволять серверу работать только с последним окном. Примерно так работает whatsapp web.
    Ответ написан
    2 комментария
  • Как правильно сделать position у записи в бд?

    Вот отличная статья с подходящими вариантами, их плюсами и минусами.
    https://begriffs.com/posts/2018-03-20-user-defined...
    Ответ написан
    Комментировать
  • MVC, ООП - какие должны быть сущности и связи, для такой задачи?

    php666
    @php666
    PHP-макака
    я только изучаю mvc
    ларавел возьми и изучай, а то тут сейчас тебе насоветовали отсебятины, в которой черт ногу сломит
    Ответ написан
    Комментировать
  • В каких случаях использовать политики и гейты в Laravel?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Как я понял политики и гейты и служат для того, что бы эту проверку в котроллере так не писать?
    Да. Проверка может быть сложной. Она может вызываться в пяти разных местах. Политики — наглядный пример принципа DRY.
    Ответ написан
    Комментировать
  • Какой класс вместо corsar использовать?

    Sanasol
    @Sanasol Куратор тега Laravel
    нельзя просто так взять и загуглить ошибку
    а сейчас не могу понять как это сделать?

    Может быть потому что он всегда был Carbon?

    А еще есть просто now()

    В крайнем случае есть в php DateTime ну и всё такое.
    Ответ написан
    Комментировать
  • Сделать карьеру на PHP: Symphony vs Zend?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Вопрос, как всегда, поставлен жутко неграмотно, так сказать, по деревенски: без какого бы то ни было видения перспективы, хотя бы на 5 лет вперёд.

    Изучать какой-либо современный фреймворк ради *карьеры* - несусветная глупость. 5 лет назад ларавеля не было, а симфони и зенд были в таком виде, что мы бы сейчас обплевались. При том что различия между современными версиями довольно минимальны.

    Это, я не знаю, как спросить "хочу быть столяром, какую отвёртку мне изучать, крестовую или шлицевую?".

    Изучать, ради карьеры, надо столярное ремесло целиком. В данном случае - программирование. Принципы, на которых устроены фреймворки. Одного этого хватит на те же лет 5. Зато потом не будет проблемы адаптироваться к неизбежным изменениям.

    А если считать пределом мечтаний клепание говносайтов на некоем идеальном фреймворке на все времена, то может так случиться, что через 5 лет к условным "ларавельщикам" будут относиться так же, как сейчас к вордпрессникам.

    И кстати для изучения принципов симфони подходит лучше

    Да - и конечно же, все ответы туда же.
    Один решил меряться количеством скачиваний. Ну если судить по такому критерию, то все перечисленное - букашки, которые копошатся под подошвами Вордпресса, с его присными темами и плагинами.

    Да, и самое главное я тоже забыл сказать. Коллега xfg в самую точку написал в комментарии:

    Фреймоворк - это на самом деле тонюсенькая прослойка над приложением. Это, по сути, система подай-принеси, принять запрос с фронта и отправить ответ. А что именно будет в ответе - решает не фреймворк, он здесь уже не при делах.

    Очень на эту тему прочищают мозги доклады и видео Дмитрия Елисеева. У него на сайте как раз появился доклад с PHP Russia 2019, который я горячо рекомендую.

    На ту же тему был и доклад Томаша Вотрубы, кстати. Что фреймворки, по сути, можно менять как перчатки, при желании. И у него есть даже инструмент для этого. Но в данном случае речь не об инструменте а о том, что фреймворк- далеко не главная часть приложения, и упираться в изучение фреймворков это все равно что в изучение отверток.
    Ответ написан
    4 комментария