• Можно ли определить функцию в свойстве table у Model Laravel?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега Laravel
    Не думаю, что удастся это реализовать в виде модели.
    Сделайте репозиторий, который будет реализовывать логику запросов и DTO, который будет держать значения полей строки таблицы.

    Впрочем, можете попробовать вот такое:
    (new BooksListHist)
        ->setTable("lst_books_hist({$IdFilter['value']})")
        ->first();

    Вы можете даже переопределить у модели метод getTable() и там дёргать параметры запроса.
    Но, имхо, это всё кривые костыли и лучше сделать репозиторий, в котором будет чётко указано что можно делать, а чего нельзя с этими данными.
    Ответ написан
    Комментировать
  • PHP ругается на ошибку в Curl, куда копать?

    @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    $destiation_dir = realpath($_FILES['file']['tmp_name']);
    Ответ написан
    2 комментария
  • Как отфильтровать данные формата json в php файле?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    json_decode(), перебрать массив циклом, foreach, например, в другой массив, и запаковать обратно json_encode()

    UPD. Накидал пример, взял твой json, сократил и добавил offline.

    <?php
        $json = '[{"id":"00000008524","title":"Комплекс из двух исследований \"МРТ головного мозга и гипофиза\" (Комплексное МРТ головного мозга с программой ранней диагностики инсультов и МР ангиография, Комплексное МРТ гипофиза)","prefix":"","type":"online","price":330.46,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":3600},{"id":"00000008520","title":"Комплекс из двух исследований \"МРТ головного мозга и шейного отдела позвоночника\" (Комплексное МРТ головного мозга с программой ранней диагностики инсультов и МР ангиография, Комплексное МРТ шейного отдела позвоночника и спинного мозга)","prefix":"","type":"offline","price":332.29,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":3900},{"id":"00000008522","title":"Комплекс из двух исследований \"МРТ грудного и поясничного отделов позвоночника\" (Комплексное МРТ грудного отдела позвоночника и спинного мозга, Комплексное МРТ поясничного и крестцового отдела позвоночника и спинного мозга)","prefix":"","type":"online","price":253.54,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":3900},{"id":"00000008526","title":"Комплекс из двух исследований \"МРТ обоих плечевых суставов\" (Комплексное МРТ плечевого сустава, Комплексное МРТ плечевого сустава)","prefix":"","type":"offline","price":350.22,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":4800},{"id":"00000008523","title":"Комплекс из двух исследований \"МРТ поясничного отдела позвоночника, крестца и копчика\" (Комплексное МРТ поясничного и крестцового отдела позвоночника и спинного мозга, Комплексное МРТ крестца и копчика)","prefix":"","type":"online","price":301.84,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":3900},{"id":"00000008521","title":"Комплекс из двух исследований \"МРТ шейного и грудного отделов позвоночника\" (Комплексное МРТ шейного отдела позвоночника и спинного мозга, Комплексное МРТ грудного отдела позвоночника и спинного мозга)","prefix":"","type":"offline","price":268.02,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":4200},{"id":"00000008528","title":"Комплекс из двух исследований \"МРТ шейного отдела позвоночника и плечевого сустава\" (Комплексное МРТ шейного отдела позвоночника и спинного мозга, Комплексное МРТ плечевого сустава)","prefix":"","type":"online","price":329.32,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":4500},{"id":"00000007924","title":"комплексное МРТ гипофиза","prefix":"","type":"offline","price":157.57,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":1800},{"id":"00000007738","title":"комплексное МРТ головного мозга с программой ранней диагностики инсультов и МР ангиография","prefix":"","type":"online","price":182.70,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":1800},{"id":"00000007741","title":"комплексное МРТ грудного отдела позвоночника и спинного мозга","prefix":"","type":"online","price":118.44,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":2100},{"id":"00000007735","title":"комплексное МРТ коленного сустава","prefix":"","type":"online","price":163.25,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":2100},{"id":"00000007739","title":"комплексное МРТ крестца и копчика","prefix":"","type":"online","price":166.74,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":2100},{"id":"00000007737","title":"комплексное МРТ крестцово-подвздошных сочленений","prefix":"","type":"online","price":113.94,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":2400},{"id":"00000007730","title":"комплексное МРТ лучезапястного сустава","prefix":"","type":"online","price":184.50,"currency":"BYN","category_id":"00000007142","no_staff":true,"during":2400}]';
        echo 'Исходный JSON: ', $json, "<br><br>\r\n\r\n";
        
        $objects_array = json_decode($json);
        $new_objects_array = [];
        foreach($objects_array as $object){
            if($object->type != 'offline'){
                $new_objects_array[] = $object;
            }
        }
        
        $new_json = json_encode($new_objects_array, JSON_UNESCAPED_UNICODE);
        
        echo 'Перебранный JSON: ', $new_json;

    Ответ написан
    3 комментария
  • Зачем нужны трейты в php?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Трейты - это миксины, которые могут добавляться к классам в различных комбинациях. Попробуйте повторить на чистых классах
    trait Harvestable {
      function harvest() { }
    }
    trait Waterable {
      function water() { }
    }
    trait Repottable {
      function repot() { }
    };
    class Plant { }
    class Vegetable extends Plant {
      use Waterable;
      use Harvestable;
    }
    class Fruit extends Plant {
      use Waterable;
      use Harvestable;
      use Repottable;
    }
    class Succulent extends Plant {
      use Repottable;
    }
    Ответ написан
    Комментировать
  • Как найти вхождение в строку более 4 букв?

    DevMan
    @DevMan
    ну так добавьте к регулярке кол-во матчей.
    [a-z]{5,}
    Ответ написан
    Комментировать
  • Как очищать текст в php?

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

    На самом деле этот вопрос встречается довольно часто. Вот например популярный ответ на Stack Overflow, который подробно разбирает этот распространённое заблуждение: https://stackoverflow.com/a/3126175. И основная мысль там:

    Понятие такой генерализованной "очистки данных" изначально бессмысленное и вредное.

    Особенно такой вот индусской функцией, которая сама по себе - пример редкого идиотизма: сначала заменяем символы < и > на HTML сущности... а потом бодро пытаемся вырезать HTML теги. Которых к этому моменту в тексте не останется ни одного!
    Или функция stripcslashes, которая здесь вообще ни к селу, ни к городу. Если я хочу написать сочетание \n, то с какой стати эта функция будет заменять его на перевод строки?
    Всё что можно оставить из этого безумного набора - это trim(). Да и то не всегда. Как правильно заметил Rsa97, могут быть случаи, когда лидирующие пробелы имеют значение, например, при выводе форматированного кода. Кстати, этим как раз грешит Хабр. Если запостить код с отступами, то первый будет "съеден"!


    Очистка

    Любая "очистка" (хотя правильнее говорить про форматирование), имеет смысл только в определённом контексте.
    И поэтому "очищать" надо только адресно, строго перед использованием в том или ином конкретном случае.

    Например, базе данных ни жарко, ни холодно от наличия HTML тегов.
    А проблемы могут начаться только при выводе данных в HTML. Но если мы будем предотвращать эти проблемы заранее, то просто попортим кучу данных. Поэтому форматировать данные для использования в контексте отрисовки HTML следет строго перед этой отрисовкой. То есть при выводе.
    Что и делают все популярные РНР шаблонизаторы автоматически.
    То есть вручную колупаться с "очисткой" вообще не нужно.

    Больше того, "очистка" HTML поможет данным, выводимым в яваскрипт, как мёртвому припарки. То есть опять же - всегда надо понимать, в какой именно контекст мы выводим данные, и форматировать соответствующим образом. В частности любые данные передавать в яваскрипт только через json_encode()

    И таких контекстов неисчислимое множество. Например, если мы используем переменную для передачи параметров в консольный скрипт, то надо обязательно обрабатывать её через escapeshellarg(). Если в регулярку - то preg_quote(). Имя файла для инклюда из переменной (хотя так делать вообще не стоит) надо хотя бы обрабатывать через basename(). И так далее.

    Валидация

    Если же наличие HTML тегов в поступающих данных противоречит техническому заданию, то надо заниматься не "очисткой", а валидацией: проверить регулярным выражением, есть ли в строке HTML теги. И если есть, то вернуть пользователю с сообщением об ошибке.

    Защита БД

    И кстати, по поводу "использую pdo".
    На всякий случай уточню, что само по себе использование PDO не защищает ни от каких проблем
    Важно помнить, что защита - это когда в базу данных отправляется строго константная строка запроса, полностью на 100% составленная из значений, прописанных в коде РНР, и в ней не используется ни одно значение, пришедшее в код извне. Причем PDO помогает здесь только наполовину, позволяя использовать в запросе подстановки вместо самих данных.
    Но при этом для всех остальных частей запроса - например имен полей - у ПДО нет никакой защиты и её надо организовывать самостоятельно. Либо проверяя по белому списку, лабо, по крайней мере, прогоняя через регулярку.
    Ответ написан
    13 комментариев
  • Как достать имя из массива по id?

    maddog670
    @maddog670
    foreach ($data['books'] as $book) {
        echo $book['title']. ' - ' .$data['authors'][$book['author']]['name']. ' - ' .$book['publishedAt']. '<br>';
    };
    Ответ написан
    1 комментарий
  • Как извлечь данные из двухмерного массива и записать их на одной строке?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Привести массив к удобному виду и в цикле вывести строки:
    // convert array to apopriate form
    $name_colors = array_combine(
    	array_values($arr['name']),
    	array_values($arr['color']),
    );
    
    // print select options
    foreach($name_colors as $name=>$color) {
    	printf('<option name="chapter" style="color:%s" class="user-chapters" >%s</option>'.PHP_EOL, $color, $name);
    }


    run PHP online
    Ответ написан
    Комментировать
  • Использование фасада DB через Model Laravel 8?

    @kandrash
    Кратко о себе
    Ответ написан
    Комментировать
  • Как заставить svg взаимодействовать с onMouseMove?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Для движения лучше менять атрибут transform группы со зрачком.
    Маской сделать видимость зрачка только внутри формы глаза.

    CSS правила обычных HTML-элементов для элементов SVG не работают.
    Ответ написан
    1 комментарий
  • Bitrix, php, как отловить момент окончания сессии?

    Ответ написан
    Комментировать
  • Как управлять вероятностями появления поста (рейтинг, сортировка, "рекомендованное")?

    hint000
    @hint000
    у админа три руки
    1. прочитайте вот этот вопрос Как выбрать случайный элемент из списка с учётом его веса? , там Николай Панаитов дал хороший, годный ответ, и это содержит 70% ответа на ваш вопрос.
    2. в качестве веса поста попробуйте:
    w=c+a*Log(1+лайков[пост])+b*Log(1+просмотров[пост])

    3. в этой формуле коэффициенты a>=0, b>=0, c>=0 - это "ручки регулировки" для вашего отбора. Чем больше a, тем сильнее влияние лайков, чем больше b, тем сильнее влияние просмотров, чем больше c, тем больше "равных возможностей для всех".
    Ответ написан
    6 комментариев
  • Как соединить массивы по ключу?

    Spartak-2205
    @Spartak-2205
    Разработка и создание сайтов
    foreach ($arr2 as $key => $value) {
    	$arr1[$key] += $value;
    }
    Ответ написан
    Комментировать
  • Как поменять одним запросом в таблице sql?

    vitaly_74
    @vitaly_74
    Попробуйте использовать ключевое слово IN и подставть туда массив
    например было:
    SELECT *
      FROM contacts
     WHERE last_name = 'Bernard'
        OR last_name = 'Boy'
        OR last_name = 'Tomas';

    стало
    MySQL
    SELECT *
      FROM contacts
     WHERE last_name IN ('Bernard', 'Boy', 'Tomas');

    По сути при переборе вы делаете тоже самое.
    Ответ написан
    1 комментарий
  • Как перебрать элементы первого массива на вхождение во втором массиве на php?

    0xD34F
    @0xD34F
    array_intersect($arr, array_map(fn($n) => $n['PROPERTY_112']['value'], $result))
    Ответ написан
    Комментировать
  • Как правильно составить запрос с помощью IN() или AND?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Первый пришедший в голову вариант:
    SELECT user_id
    FROM some_table 
    WHERE num IN (878, 925, 242)
    GROUP BY user_id
    HAVING COUNT(DISTINCT num) = 3 -- 3 количество вариантов
    ;


    MySQL fiddle

    Вариант с JOIN:

    SELECT some_table.user_id
    FROM some_table 
    JOIN some_table st1 ON st1.user_id = some_table.user_id AND st1.num = 925
    JOIN some_table st2 ON st2.user_id = some_table.user_id AND st2.num = 242
    WHERE some_table.num = 878
    ;


    MariaDB fiddle

    Вариант с GROUP_CONCAT (номера должны быть отсортированы):

    SELECT user_id, GROUP_CONCAT(DISTINCT num ORDER BY num)
    FROM some_table 
    WHERE num IN (878,925,242)
    GROUP BY user_id
    HAVING GROUP_CONCAT(DISTINCT num) = '242,878,925'
    ;


    MySQL 8.0 Fiddle
    Ответ написан
    1 комментарий
  • Как отправить PUSH-уведомление на IOS с помощью PHP?

    Есть ли возможность отправить уведомление (на одно устройство) без создания собственного приложения?

    Нет.
    Есть ли какой-либо софт в App-Store, в который можно прислать уведомление путем отправки POST/GET запроса?

    Вроде IFTTT умеет
    Ответ написан
    1 комментарий
  • Как правильно принять json в laravel?

    @hello_my_name_is_dany
    Backend Developer (Node.js, PHP, C#)
    На стороне лары можно вот так:
    https://laravel.com/docs/8.x/requests#retrieving-j...
    Но в запросе должен быть заголовок
    Content-Type: application/json
    Ну и валидировать можно спокойно
    https://laravel.com/docs/8.x/validation#validating...
    Ответ написан
    Комментировать
  • Почему возникает ошибка при ограничении доступа к профилю для незарегистрированных юзеров?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Надо понимать что слово "ютубер" это синоним слова "криворукий идиот".
    И проблемы в этом коде куда более серьёзные, чем банальная ошибка, которая лечится с помощью isset()

    Куда важнее две ДЫРИЩИ в этом коде, при наличии которых что ограничивай - что не ограничивай, но по сайту будет ходить кто захочет и как захочет.

    Во-первых, этот код вообще ничего не ограничивает. Потому что после отправки заголовка Location надо всегда принудительно завершать работу скрипта. потому что сама по себе отправка заголовка это, разумеется, не делает. И клиент может тупо заголовок проигнорировать и вместо редиректа получить саму страницу.
    Во-вторых, разумеется банальнейшая SQL инъекция, с помощью которой кто угодно сможет залогиниться под кем угодно, вообще не зная ни одного пароля
    Ответ написан
    9 комментариев
  • Как проверить Теорию 6 рукопожатий в БД с миллионами юзеров?

    dimonchik2013
    @dimonchik2013
    non progredi est regredi
    графовая БД

    neo4j - самая известная
    ArangoDB - вам подойдет
    Ответ написан
    Комментировать