• Экономика для чайника. Есть ли такая книга?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Ответ написан
    Комментировать
  • Экономика для чайника. Есть ли такая книга?

    Kolyagrozamorey
    @Kolyagrozamorey
    инженер-электроник службы ИТ ХАЕС
    Первая ссылка в гугле :) https://www.yakaboo.ua/economics-for-dummies.html
    Ответ написан
    Комментировать
  • Стоит ли идти в smm и какие перспективы?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    В SMM стоит идти, если у вас есть во всех соцсетях личные профили с кучей подписчиков. Хороший SMM'щик должен быть очень контактным, чувствовать людей и тренды, обладать юмором и креативностью, не быть обидчивым и многое другое. Асоциальным гикам в этой области успеха не добиться.
    Ответ написан
    Комментировать
  • Как удалить файл в laravel?

    neuotq
    @neuotq
    Прокрастинация
    Чтение документации и изучение хорошей пратики всё таки немного облегчает жизнь.
    Итак.
    Хранить в БД url, как делаете вы, обычно не выгодно и неинтересно. Это нужно в исключительных случаях одно разового мини проекта, когда вы точно знаете настроки меняться не будут и файлы редактироваться не будут. Либо, в специализированных БД для кеширования результата генерации url.
    В иных случаях хранить в БД нужно имя файла. Имя файла в идеале разбить конечно, но в подавляющем числе случаев достаточно будет два поля: имя с путём + имя диска. Это закроет большинство кейсов для будущего масштабирования. Но если уж совсем лень, то имя диска тоже можно опустить, хотя я советую добавить это поле.
    Далее, ваш код:
    $path = Storage::putFile('public/img', $request->file('img'));
    $url = Storage::url($path);
    $post->img = $url;

    Меняем на более простой (хотя аналог можно и из вашего конечно сделать, убрав строчку с $url и сохраняя в модель $path)
    // file('img') - это имя файла(инпута формы например) из запроса
    // store('img') - это имя подпапки для
    // 'public' - Диск из настроек (см filesystems.php)
    $path = $request->file('img')->store('img', 'public');
    $post->img = $path;

    Теперь и удалать легко. не забываем что с файлами мы работаем(по умолчанию), относительно папки /storage/app/(слеш в начале я поставил чтобы показать что путь от корня папки с проектом)
    Поэтому, когда вы передаёте в метод удаления сгенерированный заранее url. он ничего не найдёт и не удалит.
    Но теперь мы храним как раз относительный путь файла.
    Storage::delete($post->img);
    Теперь сработает, не забываем очистить поле, после удаления, если вы при этом не удаляете сам пост.

    Далее, сам url получаем так
    $url = asset($post->img);
    Ну, или если вы делаете сразу в blade шаблонах
    <img src="{{asset($post->img)}}">
    Ну и конечно я всякие проверки и тп опустил для простоты
    Ответ написан
    Комментировать
  • Как узнать что пришло в контроллер Login Laravel?

    @Kostik_1993
    Web Developer
    OMG))) Откуда у тебя взялся $string в функции username() если такого нет у тебя в трейте?
    Есть же request класс. Он же в себе и содержит все поля с твоей формы. Из него у нужно получить name и проверить email это или обычная строка

    UPD: вот вы два дебила)) Или один с двух аккаунтов!
    public function username()
    {
            dd(request()->all());
    }
    Ответ написан
  • Как сделать авторизацию по логину и email?

    @Kostik_1993
    Web Developer
    Этот кусок кода ты сюда бросил в качестве примера "я пытался, но не получилось"?

    Ну давай раскинем мозгами вместе. У тебя есть трейт AuthenticatesUsers
    Из него к себе в контроллер тебе нужно скопировать метод username. Сейчас он такой
    public function username()
        {
            return 'email';
        }


    Твоя задача проверить что тебе пришло с формы, логин или email
    Для этого тебе подойдет метод filter_var($string, FILTER_VALIDATE_EMAIL) который уже есть в PHP
    $string это то что ты отослал с формы, в зависимости от того что это ты должен вернуть название по какому полю производить поиск пользователя в таблице - email или name

    public function username()
        {
            // вот тут ты должен выполнить проверку что пришло и в зависимости от этого сделать return название столбца email или name
        }

    Дальше сам!
    Ответ написан
  • Как в Laravel построить отношения одной дочерней модели с другой через родительскую?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    Очень легко.

    Client:
    
    hasMany(Metric::class, 'project_id', 'project_id')
    
    Metric:
    
    hasMany(Client::class, 'project_id', 'project_id')
    Ответ написан
    1 комментарий
  • Как лучше поступить?

    Zoominger
    @Zoominger
    System Integrator
    Устраиваюсь на работу (php-джун), но есть проблема. Через месяц запланирована поездка.

    Отменить поездку. Попасть веб-джуном в офис - огромная удача, в вы её теряете.
    Ответ написан
    9 комментариев
  • Почему не работает исключение?

    Alex_Wells
    @Alex_Wells
    PHP/Kotlin
    А что должно было случится? } catch (Exception $exception) {
    Вы же ловите ексепшены.
    Ответ написан
    6 комментариев
  • Как временно скрыть строку из таблицы?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Если отвечать на вопрос, который вынесен в заголовок, то это возможно только в mysql 8, при блокировке с использованием опции SKIP LOCKED.

    Если же версия другая (и если решать проблему, которая стоит перед автором), то возможны варианты.

    Например добавить третий статус, "обработка".
    То есть скрипт выбирает строку, ставит статус 3, завершает обработку, и потом стиавит 2.
    Только в этом случае будут иметь смысл блокировки, хотя я все равно не очень вижу, что тут блокировать, кроме всей таблицы целиком, а это как бы не замедлило весь процесс еще больше. В общем, все зависит от времени, которое требуется на обработку строки.
    Если обработка быстрая, то пусть выполняют работу повторно.
    Если долгая, то лочить строки со статусом 2 на чтение, выбирать строку, сразу ставить ей статус 3, анлочить все строки, обрабатывать полученную, ставить статус 2.
    Плюс добавить еще поле время смены статуса и периодически собирать зависшие в 3 статусе

    Более жизненный вариант (опять же, для решения проблемы, а не вопроса) - это каждый воркер работает со своим блоком данных . например, один выбирает только id, которые кончаются на 1, второй - на 2 - и так далее. можно придумать более-менее равномерный алгоритм, чтобы воркеры не мешали друг другу, на тех же принципах, на которых делается шардирование.

    Ну а самый простой и надёжный - это ставить строке уникальный идентификатор, UUID вполне подойдет.
    Тогда вместо селект+апдейт можно делать сразу апдейт (с условием, которое раньше шло в селект)

    update table set guid = {$UUID} where ... limit 1;
    ... много кода ...
    update table set .... guid = null where guid = {$UUID};
    Ответ написан
    2 комментария
  • Как можно сократить запрос?

    v_decadence
    @v_decadence
    Уберите два ->get(), если вам нужно только количество. Сейчас вы получаете коллекцию всех записей и узнаете потом размер коллекции, а если сразу count, то будет обычный COUNT запрос к базе, без загрузки всех сущностей в коллекцию. И это будет работать быстрее.
    А объединять и правда нет смысла.
    Ответ написан
    Комментировать
  • Почему плохо писать код в шаблонах?

    @sidni
    Php Developer
    Все познается на больших проектах,
    в качестве примера возьмем методику MVC опенкарта где есть три слоя абстрации:
    1) если это запрос то для этого есть модель
    2) если это что-то из пхп кода то это контроллер
    3) если это хтмл то это шаблон
    Парни почистили от мусора код и "выкинули" в свет. Все просто красиво и самое главное бесплатно и без смс.
    Но, а теперь взглянем почему же все ненавидят опенкарт. А потому что разработчиками не предусмотрены моменты как можно расширять и кастомизировать код, и все пишут свои кастомайзы там где и предусмотренно, в контроллере и когда владельцы сайта начинают баловаться модулями то оказывается схожие по функционалу модули пытаются внедрить одновременно свой код в одно и то же место одного и тогоже контроллера и начинается чихорда когда одни функции используют данные которые будут получены двумя строками ниже или два разных модуля добавили свои параметры в стандартную функцию.
    многие умники догадались что можно весь треш перевести в шаблон где уже все данные получены, и контроллеры и шаблоны начинают разрастаться когда 3000-5000 строк в одном файле это норм и не такое видали, сайт начинает глючить, найти ошибку или добавить свой кастомайз становится просто невыносимым, я еще молчу про ocMod или vqMod (но это уже другая история)
    итог 3 версия опенкарта использует twig темплейты, где нельзя так просто "ворваться" со своим php кодом, но и основных проблем не решила.
    Ответ написан
    Комментировать
  • Почему плохо писать код в шаблонах?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Ну вот сломалась у тебя база данных. Ошибку выдаёт. Что будешь делать? Пол-шаблона то уже вывелось.

    Вообще хороший вопрос, в чем-то показательный.
    Новички все поголовно мыслят позитивными сценариями, причем линейными. Запросил - получил - вывел.
    И только с опытом приходит понимание, что на этапе запросил могут возникнуть проблемы. что на этапе "получил" из бд вылезто то, то что надо было вывести в заголовке страницы. Как этот фарш теперь провернуть назад? Что этап "вывел" тоже не так прост - иногда надо вообще ничего не выводить, а сделать редирект к примеру.

    Именно поэтому вывод начинается только после того, как вся логика отработала и все данные получены.
    Ответ написан
  • Почему плохо писать код в шаблонах?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Во-первых это хорошо для здоровья, например коллеги не будут вас бить ногами по нежным местам.
    Во-вторых - все что относится к формированию данных должно быть отделено от вывода, в идеале вынесено в модель, если завтра понадобится изменить модель, то никуда кроме места где описана модель лезть будет не нужно.
    В-третьих - такова структура нормальных приложений, мухи отдельно - котлеты отдельно, это позволяет быстро и точечно менять любой отдельный независимый компонент.
    Ответ написан
  • Как в Laravel routers подменить путь, если параметры запроса не найдены?

    @Kostik_1993
    Web Developer
    Cобери путь в контроллере, проверь наличие файла и верни тот который считаешь нужным
    Ответ написан
    Комментировать