• Eloquent ORM не получается составить запрос?

    Wolfnsex
    @Wolfnsex
    Если не хочешь быть первым - не вставай в очередь!
    Для этого в Eloquent (и не только) существуют связи, в Вашем случае - один ко многим, т.е. одна сумка -> много фотографий.

    P.S. Eloquent - это такая очень удобная штука, встроенная в Laravel, для работы с данными из БД, в т.ч. позволяющая быстро настраивать связи между объектами.

    ----------

    Ещё есть вариант сделать это прямо на уровне SQL-запроса, для MySQL выглядеть будет примерно так:
    SELECT service_category.*, GROUP_CONCAT(service.id SEPARATOR ',') AS ids
    FROM service_category 
    LEFT JOIN service ON service.category_id = service_category.id
    GROUP BY service_category.id

    В данном примере, таблица service ссылается на таблицу service_category через поле service.category_id. В качестве результата получаем вот такой дополнительный столбец, где перечислены все "service"ы для текущей категории (их ID) с разделителем через запятую:
    59e33ec521904576522071.png

    UPD. Тот запрос который у Вас в примере - это НЕ Eloquent, это QueryBuilder.
    Ответ написан
    1 комментарий
  • Как узнать метод запроса в laravel (если стоит в роуте match)?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    Правильно ли я вообще сделал, что дал оба метода одной функции контроллера?
    Если у вас внутри этого метода появилась необходимость различать тип запроса, то нет, что-то у вас не так сделано.

    Вот как грамотно разделить эти 2 задачи?
    Сгенерируйте при помощи стандартных инструментов контроллер ресурса и посмотрите как это делается идиоматически. Да просто добавьте Route::resource(...) и вызовите php artisan route:list, там вся структура контроллера видна будет.

    Раньше я писал 2 разных роута и функции в контроллере для гет и пост, сейчас хочу сократить.
    GET - это вывод формы, POST - обработка пользовательсого ввода. Это разная логика, ничего общего в этих методах не бывает обычно, поэтому вместо "сократить" в данном случае правильнее использовать "усложнить себе работу" или "ухудшить код".

    Тем не менее, вот ответ непосредственно на ваш вопрос: эта задача решается при помощи объекта запроса:
    Route::match(['get', 'post'], 'test', function (\Illuminate\Http\Request $request) {
        return $request->method();
    });
    Ответ написан
    3 комментария
  • Машинное обучение - это работа для "ученых" или программистов?

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

    Может быть лучше использовать комплексный datetime, или ещё лучше хранить как без-знаковый unixtime (работать будет быстрее, а научить модели при чтении из этого поля возвращать корректный DateTime объект - не так то уж и сложно).

    И я бы хранил в UTC, всё верно, и у пользователя отдельное значение - смещение от него в ту или иную сторону. Тогда от огромной кучи проблем избавишься, главное лишь чтоб на серверах (app + db) время корректно стояло - строго по UTC.
    Ответ написан
    3 комментария
  • Как продвигаются сайты на Laravel?

    xmoonlight
    @xmoonlight
    https://sitecoder.blogspot.com
    Скажите пожалуйста, не скажет мне потом SEO специалист, что типа продвинуть сайт не могу т.к. нет SEO расширений?
    Запомните: SEO-специалист НИКОГДА не занимается модификацией кода. Он лишь использует инструмент для добавления/редактирования необходимых тегов страниц.

    Если у SEO-специалиста не будет возможности отредактировать - это не будет означать, что он не сделал свою работу: он может просто предоставить xls таблицу с линками и тегами.

    А вот уже вносить их - придётся Вам через правку исходного кода.
    Так что - думайте заранее...
    Ответ написан
    Комментировать
  • Как сделан этот сайт?

    zorca
    @zorca
    Да никакой особенной технологии нет, это просто заранее просчитанная сетка, статичная. Скорее всего на PHP в цикле прогоняются все итемы и выстраиваются в нужные пропорции простой проверкой на четность или номер ряда. У широкой фотки класс rk-size-12, у узкой rk-size-6, потом когда две фотки в колонке, то самая обычная вложенность идет. Вообщем ничего особенного и пишется за час.
    Ответ написан
    4 комментария
  • Как тестировать больше одной фичи при релизе по фичам?

    Decadal
    @Decadal
    Сделайте ветку dev
    пусть облако веток задач будет вокруг дева: каждая ветка тестируется по отдельности, а после тестируется их совместимость между собой (я так понял, это и есть причина, по которой нельзя тестировать ветку без подтягивания изменений из мастера).
    После фидбека QA по dev-ветке сливать dev в мастер.
    А еще лучше сделать dev->stage->master.
    На деве тестить слитые ветки, на stage - целые релизы.
    Ответ написан
    2 комментария
  • Как делается версионирование?

    Krasnodar_etc
    @Krasnodar_etc
    fundraiseup
    3 - да, для этого есть webhook.js для git . Как его создать - в гугле куча мануалов. Работает он, кажется, через ssh, то есть надо сделать себе ssh-ключ для git . Опять же, мануалов много по этой теме.

    2 - Переменные окружения. Допустим, перед запуском проекта в консоли напишите: export NODE_ENV=development
    В шаблоне/в коде создайте переменную, которая будет отвечать за ссылки в зависимости от значения NODE_ENV .
    var api_url = process.env.NODE_ENV === 'development' ? 'тут локальный адрес' : 'тут боевой адрес';


    И всё, осталось подставить эту переменную в ссылку.

    1 - webhook.js помогает и в этом.
    Ответ написан
    Комментировать
  • Как правильно создать конструктор сайтов?

    dubr
    @dubr
    пыхарь
    В этом сезоне модно создавать конструкторы вот так!

    Если серьезно - вы объясните, в чем проблема - в части devops, в смысле как БД создать / nginx перегрузить и т.д., или в части того, что на сайте будет и как юзер будет этим управлять? Если первое - надо понимать ваши масштабы, сколько сайтов, сколько серверов, размер бд, нагрузки. Если второе - то начать надо явно с тз и дизайна, а то ишь приноровились все на кодера сваливать )))

    UPD. Раз интересует именно процесс разворачивания, давайте поделюсь мыслями, благо у меня есть небольшой опыт.

    Вообще алгоритм довольно тупой - сначала сделать все руками, а потом написать скрипт, который делает то же самое =)

    Для начала определитесь, будут ли все ваши сайтики работать на одной кодовой базе (скорее всего да, если нет - это уже ближе к шаред-хостингу). Дальше решите, нужен ли каждому свой персональный docroot - это зависит от того, как вы храните / раздаете статику. Если статика складывается куда-то далеко (типа на s3) - можно обойтись одним на всех, но ИМХО все-таки проще, когда он у каждого свой.

    Получится какая-то такая структура:

    app
    public
        1
            static
            index.php
            config.php
        2
        ...


    index.php подключает конфиг и запускает приложение.

    Дальше вам надо сделать, чтобы public/1 открывался по хосту типа 1.hosting.com - это nginx с регулярками.

    server {
        server_name   ~^(?<site_id>.+)\.hosting\.com$;
        root    /var/www/public/$site_id;
        ...
    }


    Кстати, если пыхе понадобится идентификатор сайта, его туда легко забросить:
    fastcgi_param SITE_ID $site_id;

    Есть нюанс с запуском PHP. По уму надо, чтобы на каждого был свой юзер, свой fpm-пул и т.д. Но у php-fpm в свое время не работал graceful reload, после добавления пула и перезапуска все клиенты получали 502. Я в итоге плюнул и стал всех обслуживать одним пулом, ограничившись open_basedir, но если у юзера есть хотя бы гипотетическая возможность добраться до кода (например какой-нибудь редактор шаблонов) - так делать не надо =) open_basedir передаем в конфиге нгинкса как-то так:

    fastcgi_param  PHP_ADMIN_VALUE "open_basedir = $document_root"


    Для подключения собственного домена юзайте map, он в нгинксе хороший =)
    map $http_host $site_id {
        site.com    1;
        site2.com  2;
    }

    Эту конструкцию можно вытащить в отдельный файл и генерить автоматом.

    С БД все просто: если можете сделать, чтобы все сидели в одной БД - так и делайте =) Если нет - делайте эталонный дамп и скрипт, который из него создает новую БД. И потом ломаем голову, как раскатывать миграции по куче баз и машин =)

    С управляющим скриптом поступаем так: фигачим сами скрипты (на чем удобно, пхп вполне справится) и http api к ним, когда юзер что-то делает на "главном" сайте, дергается этот api, это облегчит жизнь, когда перестанете влезать на один сервер.

    Для перезагрузки нгинкса и прочих стремных операций я завел отдельные sh-скрипты и засунул их в sudoers для того юзера, от которого работает api.

    Между "главным" сайтом и api полезно поставить очередь, но для начала можно и синхронно работать.

    В принципе все просто, но это конечно самодеятельность на коленке =) Мануала "пишем конструктор сайтов для чайников" я не нашел, да и вообще их живых не так много, опытом никто особо не делится. Мне больше всего помогло изучение работы шаред-хостингов, хотя и про инфы маловато.
    Ответ написан
    3 комментария
  • Как правильно создать конструктор сайтов?

    Lumore
    @Lumore
    Front-end developer
    Создаешь круд компонента и его типов (карусель, контакты и на что фантазии хватит), делаешь выборку с базы данных. У компонента обязательно добавить type_id. Для каждого компонента создаешь виджет, с соотвествующей вью. Затем можно либо условями выводить , либо свитчем в index.php.

    Я делаю так:
    foreach ($components as $component) {
            switch ($component->type) {
                case Component::TYPE_CAROUSEL:
                    echo Carousel::widget(['id' => $component->id]);
                    break;
                case Component::TYPE_BLOCKS:
                    echo Blocks::widget(['id' => $component->id]);
                    break;
                case Component::TYPE_MAP:
                    echo Map::widget(['id' => $component->id]);
                    break;
                case Component::TYPE_CONTACT:
                    echo Contact::widget(['id' => $component->id]);
                    break;
            }
        }


    А при создании компонента можно использовать scenarios() для разных типов полей.
    Ответ написан
    Комментировать
  • Почему не приходят письма с сайта на корпоративную почту?

    Jump
    @Jump
    Системный администратор со стажем.
    Ну для начала бы наверное надо покопаться в /var/log/mail и изучить что там в логах страшного и неправильного.
    Как правило после этого приходит понимание куда копать дальше или в чем конкретно проблема.
    А ежели и после этого понимания не будет можно показать конкретную ошибку из лога публике и спросить совета.
    Ответ написан
    5 комментариев
  • Как вернуться в программирование?

    @yaBliznyk
    Со знанием Си + системное администрирование - вам прямая дорога в web, лучше всего PHP.
    Самый низкий порог на сегодняшний день. Все уже решено и написано. Достаточно высокий уровень зарплат на удаленке. Со знанием английского зарплата выше тысяч на 20-30
    Сразу смотрите вакансии и берите тот стек, который требуется в понравившейся. Делайте хорошее резюме, прочитайте на этот счет пару статей.
    За неделю можно на Yii\Laravel\Symfony поднять блог, задеплоить на heroku или на домашней тачке. Github в обязательном порядке. Показывайте этот код на собеседованиях. На з.п. 40-50 через месяц уйдете, если надо больше - значит нужно проходить собеседование и просить помочь в развитии, чего нужно знать и т.д.
    Еще важно попасть в базу HRов! Вот это крайне важно. Создайте резюме на HH и в мойкруг. Откликайтесь на все вакансии, где сможете хоть что-то ответить. Проходите максимальное количество собеседований. Это будет и очень крутой опыт + тестовые задания (это интереснее, чем придумывать задачи самому). Со временем вам начнут сами HRы присылать вакансии и звонить. О вас должны слышать, только так на вас обратят внимание.
    А когда слезете с банковской иглы и пойдет стабильный доход - можете менять направление, язык, да что угодно. Но думаю, что вам уже не захочется)
    Удачи в обучении!

    p.s. Добавлю сюда небольшой коммент на тему вот этого видео
    Парни явно не в своей сфере работают.

    Мы приняли в расчет зарплаты php-программиста в 23 крупных компаниях Новосибирска. Среди них в 11 компаниях работают от 50 до 150 IT-специалистов.
    «Средневзвешенная» зарплата php-программиста:
    Senior — 112 т.р.
    Middle — 73 т.р.
    Junior — 39 т.р.

    Медиана зарплат php-программистов:
    Senior — 116 т.р.
    Middle — 74 т.р.
    Junior — 36 т.р.

    Руководители компаний обозначили тенденции
    В последние два года повышается спрос на front-end разработчиков. Также с ростом мобильного рынка активно разыскиваются опытные разработчики мобильных приложений.
    Спрос на разработчиков уровня Senior не покрывается предложением.
    Многие компании снижают требования и берут на работу разработчиков уровней Middle и Junior, а затем обучают их внутри компании. Отличный шанс для разработчиков повысить уровень, не меняя компании! Правда, зачастую, чтобы начать этот путь, необходимо сделать выбор в пользу компании с возможностью такого роста.
    Кроме денежного вознаграждения, компании предлагают разработчикам выгодные условия труда: бесплатные сладости, кофе, обеды, гибкое начало рабочего дня, возможность обучения, компенсации затрат на спортзал, частые и веселые корпоративы и многое другое.
    Что в реальности?
    На сегодня мы можем предложить вакансии для каждого уровня php-программиста. И зарплаты, которые предлагают компании, часто выше средних.

    Middle — до 100 т.р.

    Senior — до 140 т.р.

    Студенты не в курсе как работает бизнес. Программист ради hello world никому не нужен. Работодатели это уже поняли и нанимают людей, которые в курсе как решать бизнес задачи. Студент может сказать, что отработал на symfony 2 года и делал интернет магазин, а я в 30 лет скажу, что сменил алгоритм показа рекламы на сайте, что увеличило прибыл в 2.5 раза. Причем по своей инициативе, сам разработал и сам реализовал. Вот это будет цениться больше. За это будут платить)
    Ответ написан
    1 комментарий
  • Почему сервер может долго отдавать json?

    Taraflex
    @Taraflex
    Ищу работу. Контакты в профиле.
    Переходите с json на что-нибудь другое
    msgpack.org
    bsonspec.org
    если данные имеют строгую схему то
    https://developers.google.com/protocol-buffers/
    Ответ написан
    1 комментарий
  • Появится ли такой тип программиста?

    petermzg
    @petermzg
    Самый лучший программист
    Как правило если код не понятен при коротких переменных, то значит он не оптимален и корректировка с красивостью не прибавят ему производительности.
    И такие "улучшения" будут из категории "Мартышкин труд"
    Ответ написан
    Комментировать
  • Как обновить все записи в таблице?

    Увеличить на 10%:

    Items::updateAll(['price' => new \yii\db\Expression('price * 1.1')]);

    Уменьшить на 10%:

    Items::updateAll(['price' => new \yii\db\Expression('price * 0.9')]);
    Ответ написан
    1 комментарий
  • Как убрать коммит из пуша?

    lunaticman
    @lunaticman
    Дерзкий айтишник
    Никогда не разрабатывайте в master бранче! Всегда делайте отдельную ветку git checkout -b new_branch_baby

    Чтобы сейчас выйти из этой неловкой ситуации вам нужно:
    - Скопировать все изменения в отдельный бранч ( git checkout -b my_changes )
    - Почистить мастер от своих изменений ( git checkout master ; git rebase -i HEAD~6 )
    - обновить мастер бранч ( git pull origin master )
    - обновить свой бранч (git checkout my_changes ; git rebase master )

    удачи
    Ответ написан
    1 комментарий
  • Изучение математики через программирование, глупое решение?

    AlexXYZ
    @AlexXYZ
    O Keep Clear O
    Пока задача не решена у неё нет алгоритма решения.
    Бывает, что задача не решается. В этом случае надо доказать, что решения нет.
    Можно быть умным человеком и без знания математики.
    В фильме "Западня" главный герой сказал: "Сюрпризы бывают всегда".
    Бумага иногда помогает.
    Ответ написан
    Комментировать
  • Как нынче модно проекты с локального сервера на боевой заливать?

    lunaticman
    @lunaticman
    Дерзкий айтишник
    CI это конечно круто, вы наверно к этому должны стремиться. Но для маленьких проектов я использую вот этот замечательный инструмент mina -> https://github.com/mina-deploy/mina

    1. Вы описываете конфигурационный файл в руби (там впринцепи, легкий такой для понимания DSL)
    2. он потом генерить bash script, куча полезных фич просто из коробки -- откатывать релиз можно, запускать процессы, выключать, перезагружать и так далее.
    3. загружаешь скрипт на сервер и запускаешь - он там сам развертывает релиз

    дальше уже дело техники, как вы этот релиз доставлять будете - можно с помощью git'a, как вы уже сказали. а можно tarball какой-нибудь на сервак лить, и оттуда раздавать... Все зависит от вашего кейса, величины проекта и какой инструментарий вы используете :)
    Ответ написан
    Комментировать
  • Почему не устанавливаются миграции?

    Lumore
    @Lumore
    Front-end developer
    1) Проверьте правильность директории
    2) Пропишите в консоле "php init" на Development режим
    Ответ написан
    1 комментарий