Задать вопрос
  • Как в laravel построить сложную логику?

    iMedved2009
    @iMedved2009
    Не люблю людей
    Бизнес-логике - не место в контроллере.

    AppServiceProvider
    public function boot(){
    Validator::extend('count_books', function($attribute, $value, $parameters) {
            $count = IssueBook::where('client_id', $value)->where('is_returned', false)->count()
            return $count < 2;
    });
    }
    
    StoreRequest
    public function rules()
      {
        return [
          'category_id' => 'exists:App\Category,id',
          'client_id' => 'exists:App\Client,id|count_books',
          'book_id' => 'exists:App\Book,id',
          'days_issued' => 'nullable|string',
          'is_returned' => 'nullable|boolean',
          'return_date' => 'nullable|date',
        ];
      }
    Ответ написан
  • Как улучшить код, который проверяет наличие элемента в массиве и его значение?

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

    И ответ зависит от двух вводных, которые мы не знаем:
    1. по какой причине элемент 'test' может отсутствовать
    2. какие ещё значения могут быть у $arr['test']

    Если совсем всё равно на всё и пишем говнокод-стайл лишь бы покороче, то, как правильно написано в соседнем ответе - empty().

    Если элемент обязательно должен присутствовать, то либо убираем проверку на isset совсем, либо - если это интерактивное приложение - выносим отдельно, и при отсутствии элемента сообщаем об ошибке. Пусть даже и тупо 400 кодом.

    Если у $arr['test'] не могут быть другие значения, кроме true, то тоже проверить, и выбросить ошибку, если значение какое-то другое.
    Ответ написан
    Комментировать
  • Как найти 3 одинаковых числа, идущих подряд в массиве js?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    Задания запрещены правилами.
    Вариантов решений куча.
    Например, можно использовать счётчик совпадений. Надо хранить предыдущее значение и сравнивать его с текущим. Если они равны, то счётчик увеличить, иначе сбросить.
    Если счётчик равен 3, то выход true
    Ответ написан
    Комментировать
  • Как найти 3 одинаковых числа, идущих подряд в массиве js?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    для первой версии решения учебного задания можно и «на пальцах»:
    сравнивать с двумя предыдущими
    const has3 = arr => {
      for (let i = 2; i < arr.length; i++) {
        if (arr[i] === arr[i - 1] && arr[i] === arr[i - 2]) {
          return true;
        }
      }
      return false;
    }
    
    has3([1,2,3,3,4,5,5,5,6]) // true
    has3([1,2,3,3,4,5,5,6,6]) // false


    Подумайте, как можно сделать решение более универсальным, чтобы задавать параметром необходимое число идущих подряд, которое ищем.
    Ответ написан
    9 комментариев
  • Как использовать сессию для всех клиентов одновременно?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Единственно правильный ответ - никак.

    Такой вопрос можно задать только от безграмотности. От непонимания того, как работают сессии.
    Потому что сессия в обязательном порядке блокирует файл с данными на время работы с ним. И именно отсюда возникают многочисленные вопросы "а почему у меня долгий процесс в одной вкладке блокирует сайт во всех остальных вкладках?". А теперь представим, что один и тот же файл блокирует не один юзер, а все по очереди. Таймаут будет постепенно накапливаться, и в итоге сайт у всех пользователей сначала начнет ощутимо подтормаживать, а потом и вовсе встанет колом.
    Поэтому такая вещь, как "сессия сразу для всех пользователей" заведомо является бессмыслицей.

    Если под "сессией" имелось в виду общее хранилище для всех пользователей, то оно называется "база данных". И в этом смысле "БД не предлагать" выглядит беспочвенным капризом. Как правильно заметил N в комментарии, такое заявление звучит как "Как кушать суп? Ложку не предлагать."
    Такие заявления надо всегда подробно обосновывать. И в этом случае вам либо действительно подскажут, как обойтись без БД, либо объяснят, что это просто блажь.

    Если хранилище не нужно, то есть значение переменной не меняется со временем, то, как правильно сказано в соседнем ответе, просто делается константа в конфигурационном файле, который по умолчанию включается во все скрипты.
    Ответ написан
    Комментировать
  • Почему выдает ошибку #1050 - Table 'users' already exists?

    paran0id
    @paran0id
    Умный, но ленивый
    CREATE TABLE IF NOT EXISTS users (
    Ответ написан
    Комментировать
  • Как написать такой SQL запрос?

    rozhnev
    @rozhnev Куратор тега SQL
    Fullstack programmer, DBA, медленно, дорого
    select d.DEPARTMENT_ID, d.DEPARTMENT_NAME, COUNT(e.EMPLOYEE_ID)
    from departments d
    left join employees e on d.DEPARTMENT_ID = e.DEPARTMENT_ID
    group by d.DEPARTMENT_ID, d.DEPARTMENT_NAME;


    SQL online editor
    Ответ написан
    Комментировать
  • Как написать такой SQL запрос?

    iMedved2009
    @iMedved2009
    Не люблю людей
    select 
      departments.id, 
      departments.department, 
      count(*) as count 
    from departments 
    join employees on employees.department_id = departments.id 
    group by departments.id, departments.name;


    В случае если нам нужны департаменты у которых нет сотрудников inner join меняем на left join

    select 
      departments.id, 
      departments.department, 
      count(*) as count 
    from departments 
    left join employees on employees.department_id = departments.id 
    group by departments.id, departments.name;
    Ответ написан
    4 комментария
  • Как сравнить по времени в таблицах, отбросив минуты и секунды до часов?

    @alexalexes
    Select t1.ID, t1.TIME
    from 
    TABLE_1 t1 
    JOIN TABLE_2 t2 ON t1.ID=t2.ID
                  and to_char(t1.TIME, 'DD.MM.YYYY HH24') = to_char(t2.TIME, 'DD.MM.YYYY HH24')

    Вариант 2 (возможно, пригодится при оптимизации, так как на выходе сравниваются значения в типе дата время, а не строк):
    ... and trunc(t1.TIME, 'hh24') = trunc(t2.TIME, 'hh24')

    PS: Хорошо бы еще индекс создать под этот формат времени для колонок t1.TIME и t2.TIME, тогда запрос будет всегда производителен.
    Ответ написан
    4 комментария
  • Как отсеять сгенерированные email?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    2yiwuei3827ryifg2i28ftiwegfi@yandex.ru или такие vladimir_saveliev_98@mail.ru, natalia_blohina_93@list.ru
    А с чего вдруг их не принимать? Они валидны и соответствуют RFC. Какой смысл их удалять? Или точнее, какой смысл удалять работающие емайлы? Вам не пофиг как выглядит емайл, если он рабочий? Или есть какой-то особый смысл в красивых емайлах?
    Ответ написан
    4 комментария
  • Как отсеять сгенерированные email?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Это не возможно сделать по адресу, потому что адрес chtoetozahren@gmail.com может оказаться реальным а адрес john.lennon@beatles.com быть генерированным.
    Единственный вариант отправлять на этот адрес и если нет подтверждения в течении Х дней удалять
    Ответ написан
    2 комментария
  • Народ, как использовать редис на 2 проекта?

    GigaLORDex
    @GigaLORDex
    Бизнес-Системный аналитик
    Как вариант - префикс.
    Ответ написан
    Комментировать
  • Как объединить данные в двумерном массиве?

    0xD34F
    @0xD34F
    $grouped = array_values(array_reduce($arr, function($acc, $n) {
      $acc[$n[0]] ??= [ $n[0] ];
      array_push($acc[$n[0]], ...array_slice($n, 1));
      return $acc;
    }, []));
    Ответ написан
    Комментировать
  • Почему PHP используется в не HighLoad приложениях?

    sergey-gornostaev
    @sergey-gornostaev
    Седой и строгий
    Этот один человек профан и глупец, а PHP простой в изучении и использовании язык, который применяется в проектах с любым уровнем нагрузок.
    Ответ написан
    2 комментария
  • Как усложнить жизнь провайдеру не теряя комфорта?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Тут надо учитывать, что сам факт использования шифрованного канала легко задетектить. VPN маскируется под повседневную бытовую активность, а значит понять,ч то человек что-то скрывает легко.
    Представьте человека, идущего летним вечером по улице в темном плаще, шляпе, тёмных очках и накладных усах. Его станут проверять первым.
    Если вы действительно совершаете какую-то незаконную или компрометирующую деятельность, то делать это просто через VPN или TOR - решение частичное и ни от чего не убережет.
    Отсутствие обычной бытовой сетевой активности -это тоже сигнал и признак того, что вы "в накладных усах и шляпе".
    Настоящие параноики не должны вести себя как параноики, это из выделяет из общей массы. Настоящие параноики живут жизнью с двойным и тройным дном, сам факт наличия которых (днищ? как еще во множественном числе сказать?) доказать проблематично. Однако неосторжностью проюить такое дно легче легкого.

    Очевидно, что готовых решений тут быть не может, иначе они станут очередным паттерном. Но хорошие направления вам уже посоветовали.
    Можно завести отдельный роутер, который будет подключаться через свой VPN на зарубежном VPS.
    Вся каждодневная бытовая активность у вас через обычный открытый канал. Второй роутер можно юзать только для сёрфинга по запрещеным нынче инстаграммам и прочим фейспукам (официально). Для остального (неофициально) нужно придумывать кастомные стеганографические каналы передачи сигналов. Кастомные каналы пока что отслеживать проблематично.
    Ну и да, обсуждать вот так вот в сети особенности и способы организации кастомных каналов довольно глупо. Это надо делать на шашлыках лично=)
    Ответ написан
    Комментировать
  • Смогут ли меня вычислить в vk и привлечь к ответственности, если я сделаю эти действия?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    В больнице с переломом ноги
    Чувак, ты либо мой коллега-тролль, либо просто "молодец" (в одной из прежних контор это слово у нас было аналогом слова "долб..б"). Тебя уже нашли и это вовсе не шутка :)
    1. Покупаю чужую страницу в vk

    ...и нарушаю правила vk, который тут же эту страницу забанит. Про то, что он сольет логи и все что запросят - даже и не говорю - предполагается по умолчанию.
    3. Ставлю VPN, который не надо оплачивать

    ...и натыкаюсь на VPN, который сливает логи российским спецслужбам. Отличное решение. Да, нельзя точно сказать, что он сливает именно им, нельзя даже точно сказать, что вообще сливает. Но предполагать надо самое худщее. Любой VPN сливает логи, вопрос только в том, кому.
    Но разве правоохранительные органы смогут понять, какую именно я страницу купил?

    Еще как смогут. ВК в этом им будет активно помогать. На самом деле образ тупого опера - это киношный штамп, который намеренно не развенчивается, а реально - там в достатке и умений и знаний :)
    Смогут ли меня привлечь к ответственности за несанкционированный доступ к чужой странице?

    Когда зайдет речь о том, будет ли это УК 137 или же УК 207.3 Вы сами сдадите все свои VPN, прокси, торы и прочее что там у Вас будет - лишь бы не попасть под УК 207.3

    Подумайте - а стоит ли оно того? Есть тьма других площадок, чтобы высказать свое мнение, в том числе и таких, на которых особо и стесняться не надо - правда в РФ они забокированы :)
    Ответ написан
    Комментировать
  • На что обратить внимание на сервере после взлома?

    ky0
    @ky0
    Миллиардер, филантроп, патологический лгун
    В подобных случаях лучше переустановить ОС к чертям, имхо.
    Ответ написан
    Комментировать
  • Как стать сисадмином?

    ky0
    @ky0 Куратор тега Системное администрирование
    Миллиардер, филантроп, патологический лгун
    Как стать сисадмином?

    Самый простой способ - вас должен укусить опытный админ.
    Ответ написан
    3 комментария
  • Выборка из нескольких таблиц одной структуры MySQL?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Используйте штатное партицирование MySQL.
    https://dev.mysql.com/doc/refman/8.0/en/partitioni...
    Ответ написан
    3 комментария