Задать вопрос
  • Как быстро добавлять / обновлять миллионы строк в БД Laravel?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Для сферического обновления в вакууме не нужно вообще ничего.
    БД спокойно по умолчанию пишет десятки тысяч строк в секунду.
    То есть просто записывать и всё.

    При возникновении конкретных проблем надо собраться с мыслями и задать конкретный вопрос, детально описывая проблему. А не вот это вот "ну у нас там много всего и растёт нагрузка".

    В качестве чисто гадательной рекомендации поиграться с innodb_flush_log_at_trx_commit / транзакции.
    Ответ написан
    Комментировать
  • Как правильно задать несколько классов элементу?

    Fragster
    @Fragster
    помогло? отметь решением!
    Потому что у тебя ошибка вычисления выражения desktop - news__post - wrapper и m - t_1, о чем он с примерно 99% вероятностью ругается в консоли. Добавь кавычки, чтобы были строки с названием класса. А вообще в твоем случае можно использовать совместно
    class="тут классы, применяемые всегда" :class="тут динамическая часть"
    Ответ написан
    2 комментария
  • Laravel 9 и PHP SDK VK, как связать?

    AmdY
    @AmdY
    PHP и прочие вебштучки
    Пользуйтесь нормальной IDE PHPStrom. Она и сама use подставит и предупредит, если что-то сделали не так. Это же детская ошибка в синтаксисе.
    Ответ написан
    Комментировать
  • Laravel как правильно обновить баланс при покупке?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега PHP
    Нужно просто для всех команд списания с баланса использовать мьютекс, внутри которого:
    1. Получать текущий баланс.
    2. Проверять, что он больше, либо равен сумме списания.
    3. Вносить изменения в БД, если всё ок.
    Третий шаг можно реализовать по-разному - через таблицу транзакций, через единственное поле баланса, как у вас сейчас или ещё как угодно. Эта часть совершенно не важна.
    Важно только то, что функционал списания с баланса в целом становится однопоточным за счёт блокировки.
    Нужно только учитывать, что блокировка должна быть распределённой. Стандартом является использование алгоритма Redlock, реализованном на базе Redis.
    Ещё важно использовать один блокировщик именно для всех типов списаний. Если вы в buyProduct будете использовать один мьютекс, а в каком-нибудь buyService другой, то работать это правильно не будет.
    Ответ написан
    Комментировать
  • Laravel как правильно обновить баланс при покупке?

    iMedved2009
    @iMedved2009
    Не люблю людей
    1. Лочить запись в таблице балансов до момента списания. Залочили, проверили, списали, разлочили. Другие процессы либо будут ждать - либо вылетят по таймауту.

    2. Использовать update с условием. update user_balance where user_id = ? and balance > нужного. У вас запрос не выполнится если кто то уже списал деньги. А вы по affected rows можете судить списалось или нет
    Ответ написан
  • Как сократить запись в v-bind?

    @VolgaVolga
    Откройте для себя "computed".
    Ответ написан
    Комментировать
  • Как освободить зарезервированную оперативную память?

    DamianLewis
    @DamianLewis Автор вопроса
    Написал в техподдержку Lenovo. Ответили следующее:
    На данном устройстве нет возможности изменить количество выделяемой памяти в BIOS. По умолчанию встроенный графический адаптер использует столько оперативной памяти, сколько необходимо для конкретных задач. Некоторые дополнительные параметры можно изменить в настройках Windows. Рекомендуем Вам обратиться в поддержку Microsoft для получения более подробной информации:
    +7 (495) 916-7171, +7 (800) 200-8001
    Онлайн поддержка: https://support.microsoft.com/ru-ru/contactus/


    Через программные решения в работающей системе изменить ничего не получится. Если такая возможность в BIOS'е не заложена, других вариантов решить данную проблему нет.
    Ответ написан
    4 комментария
  • Что лучше? Строить свой интерфейс или же юзать готовые админки типа Filament PHP, orchid, nova?

    Sanes
    @Sanes
    Готовые админки подойдут только для примитивных CRUD операций.
    Я пришел к тому, что потихоньку собираю библиотеку из Blade компонентов Uikit 3 (мне с ним удобно работать).
    Ответ написан
    1 комментарий
  • Как заставить срабатывать Laravel Task Scheduler по заданному расписанию?

    @vism
    2022-08-27 14:35:00 Running [Callback] ............................ 8ms DONE

    вот ведь, работает. это у вас лог не работает видимо
    Ответ написан
    Комментировать
  • Как подключить библиотеку во vue.js 3?

    Fragster
    @Fragster
    помогло? отметь решением!
    ты пытаешься смешать composition api и options api.
    Если пользуешься options api, то убери import { useCookies } from "vue3-cookies";, найди место, где создается экземпляр vue (где-то в index.js или подобном месте ищи createApp()) и добавь туда строки подключения плагина для options api:
    import VueCookies from 'vue3-cookies'
    
    let app = createApp(App);
    app.use(VueCookies);
    app.mount('#app')


    или переходи на composition api и там уже useCookies и вот это все. В принципе, в документации всё описано.
    Ответ написан
    3 комментария
  • Не вызовут ли аттрибуты phpstorm проблем в продакшене?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Не вызовут, если версия РНР "на проде" не меньше 8.0
    Введение в атрибуты
    Ответ написан
    2 комментария
  • Зачем задавать приватный модификатор доступа для свойств класса?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    У вас очень логичный вопрос на счет сеттера: сеттер полностью уничтожает задумку с инкапсуляцией. Правильно это называется "семантическое нарушение инкапсуляции" — то есть как-бы мы инкапсулировали, но по факту назад открыли прямую запись в свойство напрямую. Все доводы "ну мы можем в сеттере валидировать" не корректны

    Правильным способом будет не использовать сеттеры. Вот моя статья на эту тему:
    https://habr.com/ru/post/469323/

    Более подробно: каждый класс нужно проектирвовать так, чтобы данные внутри были максимально связаны. Например каждый метод работать должен в хорошем случае с максимальным числом полей класса, тогда у него высокий cohesion... В тоже время снаружи наужно работать с максимальн омалым числом метода, тогда будет низкая связанность (coupling). Это пара принципов из GRASP.
    Когда вы делаете сеттеры и геттеры, то у вас данные внутри между собой почти никак не взаимодействут: с геттером работают снаружи, с сеттером работаю снаружи — весь класс нараспашку, а в нем в 100% случаев появляются данные, которые вместе не должны находиться и никак не связаны — анрушена и абстракция и инвариант и много чего еще...

    Про инвариант отдельно: например есть платеж, у него есть значение, с которым платеж инициирвоан (initValue), есть значение холда (holdAmount) и есть значение чарджа на списание (chargeAmount)
    Когда вы работаете с платежом, контролируя ивнариант в самом классе, то ваш каждый метод првоеряет др значения и позволяет перейти к др состоянию... методов будет 2-3, все инкапсулировано и безопасно.

    Например:
    class Payment {
         pub func charge(amount int) void {
              if (this.holdAmount < amount && this.initAmount < amount) {
                   throw new PaymentException('Unavailable charge amount')
              }
    
               if (this.status === PaymentStatus:finish) {
                   throw new PaymentException('Payment already fisnished')
              }
    
              this.chargeAmount = amount
              this.holdAmount -= amount
              this.status = PaymentStatus:finish
         }
    }


    Тут в одном методе полные проверки и класс сам контролирует все состояние внутри, также соблюдается закон Деметры. У даннго кода высокий cohesion (из GRASP), тк внутри идет плотная работа с внутр данными (значит они корректно тут закроекны) и низкий coupling ( с теми данными для данного кейса только один метод работы, все внутри)

    Когда вы раскроете сеттерами и геттерами, то ваше состояние становится непредсказуемо и полагается только на то, что снаружи точно подумали об инварианте (нет)
    Ответ написан
    18 комментариев
  • Есть ли возможность из одного модуля вызвать мутацию другого?

    Fragster
    @Fragster
    помогло? отметь решением!
    commit('namespace/someMutation', payload, { root: true })

    но вообще если приложение новое, я бы смотрел в сторону pinia, намного удобнее.
    Ответ написан
    3 комментария
  • Как передать на бекенд требования к API?

    @Vitsliputsli
    Многие фронтендеры относятся к беку, как к некой обертке для работы с базой данной. Когда такие становится лидом команды и начинают диктовать свои требования беку, начинается ад, проект даже с простым беком превращается в нечто монструозное, разваливающиеся на ходу. Но, так как снаружи бек не виден, руководство считает, что дело в отдельных тупых бек-разработчиках, которые артачатся, не хотят работать и увольняются.
    Судя по вашим фразам, вы скорее всего один из них. Так как уверены, что приложение - это то, что на фронте, что api - это хрень, которая завязана на отображении информации на фронте, что разработчики бека не нужны при разработке архитектуры и вообще пофиг, что они там делают, главное чтобы давали то, что хочет фронт.
    Но, раз вопрос задан, значит сомнения вас посещают. Поэтому: приложение это не только фронт, а зачастую фронт это не самая сложная его часть. Бек - это не обертка над базой данных, и если вы поменяете значение в базе, это не значит, что к примеру, в потоковом вещании сменится кодек (вот, кому-то может и смешно, а мне в такой ситуации ни фига не было весело). С помощью API получают данные, поэтому не важно, что там у вас напроектировали дизайнеры, или как эти данные выводит фронт, API должен быть универсальным и не зависить от того как вы отображаете данные, поэтому, к примеру, бек может вам дать для получения данных несколько универсальных запросов, а не один специальный. В общем, все гораздо сложнее, и ваш вопрос как состыковать фронт и бек перерастает в вопрос как формировать архитектуру проекта, и как управлять командой.
    Ответ написан
    17 комментариев
  • Как реализовать приложение для фитнес-центра?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Знаком с мобильным сектором довольно поверхностно, но кое о чем в курсе.
    1.Есть кроссплатформенные фреймворки по типу react и native flutter. Собственно они позволят максимально упростить создание интерфейса под разные платформы.
    2.Сейчас, насколько могу судить, каких-то существенных отличий в походе к управлению/параметрам устройств нет и делать разные дизайны имеет смысл если того требует специфика.
    3.
    разработчики приложений могут делать и фронт, и бэк

    Могут, в теории. Фулстеки. Но таких, особенно умеющих в мобильную разработку, а главное грамотных - на порядок меньше.
    Ответ написан
    1 комментарий
  • Как в Laravel выполнить задачу время которой указано в БД?

    neuotq
    @neuotq
    Прокрастинация
    Самый простой способ это начать с планировщика https://laravel.com/docs/9.x/scheduling, там допустим сделать задание(уже вам виднее Job или ещё как), который будет в момент запуска проверять вашу БД на текущие задачи и делать их.
    Ну те сделали, например каждую минуту
    $schedule->call(new DoCurrentJobsFromDb)->everyMinute();

    А в DoCurrentJobsFromDb запрос к базе, выборка по времени текущих заданий и отправка их на немедленное выполнение(тут снова тем или иным способом, подходящим под вашу архитектуру).
    Параметры частоты уже выбираете из ваших соображений.
    Ответ написан
    2 комментария
  • Где можно применить оператор нулевого слияния?

    @entermix
    Это синтаксический сахар

    let user;
    alert(user ?? "Аноним"); // Аноним (user не существует)


    let user = "Иван";
    alert(user ?? "Аноним"); // Иван (user существует)


    let firstName = null;
    let lastName = null;
    let nickName = "Суперкодер";

    // показывает первое значение, которое определено:
    alert(firstName ?? lastName ?? nickName ?? "Аноним"); // Суперкодер


    https://learn.javascript.ru/nullish-coalescing-operator
    Ответ написан
    Комментировать
  • Зачем нужны роутеры если можно обходиться без них в express.js?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Просто один из уровней абстракции. Точно так же можно сказать о любой функции/методе и так дойти вниз до машинного кода и транзисторов. Кроме того, роутер может иметь более сложную логику, чем просто отработка запроса по ссылке - например использовать параметры из ссылки.
    Ответ написан
    Комментировать
  • Как убрать авто подстановку кавычек?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    File → Settings → Editor → General → Smart Keys : Insert pair quote
    Ответ написан
    Комментировать