• Почему не работает observer?

    pLavrenov
    @pLavrenov
    Разработка сайтов
    User::observe(UserObserver::class);

    Там должен быть класс обсервера а не эвента(?).
    И еще EventServiceProvider не очень подходит логически. Если зарегистрировать ObserverServiceProvider будет лучше.

    Общая логика должна быть такая. Создание модели выполняет created обсервера, в created инициируется эвент на который подписан листенер. а вот в листенере и выполняется отправка почты.
    Вызов эвента можно инициировать сразу через модель без прокладки обсервера через protected $events.
    Еще есть способ для совсем наркоманов через eloquent.created event.
    Ответ написан
    Комментировать
  • Как правильно организовать связь?

    phaggi
    @phaggi
    лужу, паяю, ЭВМы починяю
    Если у вас есть статья article_1 и она принадлежит трем категориям category_1, category_2 и category_3, у вас будут три записи в промежуточной таблице:
    # | articles  | categories
    ————————————-————————————-
    1 | article_1 | category_1
    2 | article_1 | category_2
    3 | article_1 | category_3
    Ответ написан
    Комментировать
  • Как сгенерировать рандомные цифры и букву, но в определенном диапозоне?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    <?php
    $str = ""
        .range("A", "G")[array_rand(range("A", "G"))]
        .range("A", "G")[array_rand(range("A", "G"))]
        .mt_rand(1, 9)
        .range("G", "Z")[array_rand(range("G", "Z"))]
        .range("G", "Z")[array_rand(range("G", "Z"))];
    Ответ написан
    1 комментарий
  • Какой запрос на eloquent можно сделать, для дефолтного поля?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    В рамках описания полей у вас доступен $this который ссылается на модель текущего объекта
    Если count это просто поле у модели то должно сработать $this->count

    Text::make(__('Field'), 'thing')->default(function ($request){
        return $this->count;
    }),
    Ответ написан
    Комментировать
  • Как правильно указать путь к проекту в конфиге nginx?

    karabanov
    @karabanov Куратор тега Docker
    Системный администратор
    - ./docker/nginx/sites/:/etc/nginx/sites-available/

    sites-available - это Debian style, в sites-available помещают конфиги, а в sites-enabled симлинки на них. Так что даже если бы ты использовал образ Nginx на основе Debian ничего бы не заработало.

    Посмотрим, что там в образе с Alpine:
    docker run --rm -it nginx:alpine ls -1 /etc/nginx
    
    conf.d
    fastcgi.conf
    fastcgi_params
    mime.types
    modules
    nginx.conf
    scgi_params
    uwsgi_params

    Ага conf.d - значит там ванильный Nginx
    docker run --rm -it nginx:alpine ls -1 /etc/nginx/conf.d/
    
    default.conf

    Вот в conf.d и надо поместить конфиг вместо default.conf
    Ответ написан
    5 комментариев
  • Как правильно подключить psotgres в docker?

    fox_12
    @fox_12
    Расставляю биты, управляю заряженными частицами
    Контейнеры вашего проекта видят контейнер с postgres как db а не 127.0.0.1
    По той же причине у вас будет проблема с redis
    Ответ написан
    3 комментария
  • Почему не получается запустить ни одну команду php artisan?

    Дело не в artisan-команде, а в том, что вы не установили драйвер для pgsql: https://askubuntu.com/questions/927225/how-to-enab...
    Ответ написан
    Комментировать
  • Как создать нового юзера и новую базу в postgres, на убунту?

    Melkij
    @Melkij
    PostgreSQL DBA
    Парольная аутентификация лишь один из множества доступных вариантов. Хотя наиболее простой и распространённый. Какой способ аутентификации будет требовать СУБД - зависит от списка правил в pg_hba.conf. Очень редко нужно что-то кроме служебного правила peer для postgres (именно из-за него psql после sudo -iu postgres не спрашивает никакие пароли, но только у postgres'а) и md5 для всего остального.

    Базово создание новой базы с отдельным пользователем-владельцем выглядит так (от суперпользователя базы):
    CREATE USER "$NEWOWNER" PASSWORD '$NEWPASS';
    CREATE DATABASE ${NEWDB} OWNER "$NEWOWNER";
    REVOKE ALL ON DATABASE $NEWDB FROM public;


    В соседнем ответе вам неверно подсказывают, что "можно сразу указать какому юзеру разрешен доступ". create database разрешит доступ всем (но именно подключение к базе, а не ко всему внутри базы - что частая проблема непонимания прав). И имеет смысл наоборот отобрать доступ от всех прочих, т.е. от public. Owner, конечно, доступ сохранит.

    Чуть ближе к production имеет смысл использовать такой шаблон:
    CREATE USER "$NEWOWNER" PASSWORD '$NEWPASS';
    CREATE DATABASE ${NEWDB} OWNER "$NEWOWNER";
    CREATE ROLE ${NEWDB}_role;
    CREATE ROLE ${NEWDB}_ro;
    CREATE ROLE ${NEWDB}_rw;
    GRANT ${NEWDB}_role TO ${NEWDB}_ro, ${NEWDB}_rw;
    REVOKE ALL ON DATABASE $NEWDB FROM public;
    GRANT CONNECT ON DATABASE $NEWDB TO ${NEWDB}_role;
    GRANT ${NEWDB}_rw TO "$NEWOWNER";
    \c $NEWDB
    ALTER SCHEMA public OWNER TO "$NEWOWNER";
    REVOKE ALL ON SCHEMA public FROM public;
    GRANT USAGE ON SCHEMA public TO ${NEWDB}_ro, ${NEWDB}_rw;
    ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT SELECT ON SEQUENCES TO ${NEWDB}_ro;
    ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT SELECT,USAGE ON SEQUENCES TO ${NEWDB}_rw;
    ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT SELECT ON TABLES TO ${NEWDB}_ro;
    ALTER DEFAULT PRIVILEGES FOR ROLE postgres GRANT SELECT,INSERT,DELETE,UPDATE ON TABLES TO ${NEWDB}_rw;
    ALTER DEFAULT PRIVILEGES FOR ROLE "$NEWOWNER" GRANT SELECT ON SEQUENCES TO ${NEWDB}_ro;
    ALTER DEFAULT PRIVILEGES FOR ROLE "$NEWOWNER" GRANT SELECT,USAGE ON SEQUENCES TO ${NEWDB}_rw;
    ALTER DEFAULT PRIVILEGES FOR ROLE "$NEWOWNER" GRANT SELECT ON TABLES TO ${NEWDB}_ro;
    ALTER DEFAULT PRIVILEGES FOR ROLE "$NEWOWNER" GRANT SELECT,INSERT,DELETE,UPDATE ON TABLES TO ${NEWDB}_rw;

    В результате получим:
    - пользователя-владельца базы, который предназначен выполнять всякие миграции схемы данных
    - роль имя_базы_role которую можно давать другим пользователям для возможности подключения к этой базе, но без доступа к таблицам приложения (например, используем для мониторинга)
    - роль имя_базы_ro которая даст select-only права ко всем (в том числе будущим) таблицам, созданным от пользователя-владельца это базы
    - роль имя_базы_rw - соответственно для выполнения select,insert,update,delete
    Ответ написан
    Комментировать
  • Как создать нового юзера и новую базу в postgres, на убунту?

    откуда брать логин и пароль от этой базы?

    Ты их указываешь, когда в первый раз базу создаёшь.
    Если не указал, то лезь в /etc/postgresql/[версия]/main/pg_hba.conf и разрешай беспарольный доступ.
    # IPv4 local connections:
    host    all     all     127.0.0.1/32      trust
    # IPv6 local connections:
    host    all     all     ::1/128           trust

    Главное потом обратно верни.

    После изменения конфига надо постгрес перезапустить.

    И тогда ты сможешь подключиться примерно так:
    psql -U postgres -h localhost

    Для создания нового пользователя - подключаешься к базе через psql или через pgadmin, или ещё как, и делаешь запрос CREATE USER
    https://www.postgresql.org/docs/14/sql-createuser.html
    Для создания базы, соответственно CREATE DATABASE
    https://www.postgresql.org/docs/14/sql-createdatab...
    прописав sudo -i -u postgres

    Это совершенно не обязательно (я даже не уверен, что так можно)
    Ответ написан
    2 комментария
  • Можно ли подключиться через pgAdmin к openserver?

    @gsaw
    Вы видимо не совсем понимаете как работает клиент серверная архитектура. База данных это сервер, а phpAdmin это клиент. Обычно к серверу базы данных подключаются по сети. Тоесть теоретически можно подключиться и со своего компьютера к базе данных на сервере. Если вы знаете как. Но обычно, серевер базы данных конфигурируется так, что вы только можете подключится клиентом, который работает на том же хосте. Судя по вашему описанию, вы не сами его настраивали и лучше пока вам это самому не делать.

    Самое простое в вашем случае и дальше использовать phppgAdmin предоставляемым хостером.

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


    Вы учитесь работать с базой данных не мышкой, а набирая команды. Разберитесь, что такое DDL и DML и тогда вам откроется чудесный мир баз данных. Где вы сможете делать что угодно в каком угодно клиенте. Если нет каких то типов данных, то наверняка есть их аналоги, которые просто по другому зовутся.

    primary и foreign keys это вообще стандарт и есть в любой базе данных. Для автоинкримента вам возможно понадобится sequence.

    https://info-comp.ru/what-is-ddl-dml-dcl-tcl
    https://postgrespro.ru/docs/postgrespro/10/datatype
    mech.math.msu.su/~shvetz/54/inf/databases/chSerial...
    Ответ написан
    1 комментарий
  • Как продолжить цепь запросов в php?

    @Kirill-Gorelov
    С ума с IT
    Может, конечно поздно, но вдруг

    Смотри вкладку "пример из реальной жизни"
    https://refactoring.guru/ru/design-patterns/builde...
    Ответ написан
    Комментировать
  • Как выучить javaScript для бекенда?

    RAFAILgaley
    @RAFAILgaley
    jquery это давно устаревшая технология
    избегай вакансии где это требуют

    php-программисту не надо знать js и nodeJs
    Ответ написан
    7 комментариев
  • Как выучить javaScript для бекенда?

    FanatPHP
    @FanatPHP
    Чебуратор тега РНР
    Никак.
    Яваскрипт нужен только для яваскрипт бэкенда.
    На вакансию РНР разработчика нужно знание РНР.

    Путь дальше очень простй - перестать создавать под этим и другими аккаунтами однообразные топики на тему "Страдания юного Вертера" и продолжать грызть РНР, раз уж начали.
    Ответ написан
    2 комментария
  • Как продолжить цепь запросов в php?

    rozhnev
    @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    <?php
    class A
    {
    	protected $sql = null;
    	
    	public function setSQL()
        {
            $this->sql = "SELECT * FROM users WHERE id = 123";
            return $this;
        }
    	
    	public function getSQL()
        {
            return $this->sql;
        }
    }
    
    class B extends A
    {
        public function addSQL()
        {
            $this->sql .= " AND name = 'Alex'";
    		
    		return $this;
        }
    }
    $a = new A();
    $b = new B();
    
    echo $b->setSQL()->addSQL()->getSQL();


    PHP class test
    Ответ написан
    Комментировать
  • Как чаще всего бывает на практике?

    @alekcena
    Нелинейный наставник
    Сначала выучи php
    Потом уже в ООП
    - Переменные.
    - Условия
    - Массивы
    - Циклы
    - Как массивы перебирать и модифицировать
    Логика в реализации задач проста:
    Если тебе дадут задачу и ты пришёл php разработчиком то ты её будешь решать на php.
    Если ты пришёл на Laravel разработчика. ты будешь писать на php+ laravel
    И тд....
    Ответ написан
    4 комментария
  • Как чаще всего бывает на практике?

    ThunderCat
    @ThunderCat
    {PHP, MySql, HTML, JS, CSS} developer
    На данный момент учу php, а именно: ООП, интерфейсы и трейты.
    ООП, интерфейсы и трейты напрямую к пхп отношения не имеют, это общие принципы построения кода.

    Недавно узнал, что в php есть фишка рендеринга страниц (создаем метод, допустим, render() и вызывает каждый раз его, когда хотим отобразить какую либо php/html страницу).
    Круто, про то как происходит "рендеринг" конечно знать не надо, ну есть и есть...

    В свободное время листаю вакансии php программиста
    Надеюсь что пока это чисто академический интерес, судя по вопросу вы не сильно тяните на, допустим, стажера...

    если допустим, мне дадут по началу задачу "добавить в профиле пользователя строку с номером телефона и передавать ее в бд", на чем и через что я буду выполнять эту задачу, то ли через какой то уже готовый шаблон, то ли есть уже какая то готовая библиотека/фреймворк?
    На компьютере через клавиатуру будете. Возможно будет готовый шаблон (сомневаюсь что мы с вами говорим об одном и том же "шаблоне"), скорее всего это будет какой-то готовый фреймворк, и даже уже какой-то функционал на нем будет написан (но это не точно).

    Читайте как устроены современные MVC приложения на пхп, посмотрите как работают популярные фреймворки, попробуйте на них что-то базовое сделать, станет понятнее как все устроено.
    Ответ написан
    4 комментария
  • Тернарный оператор, ?? вместо ?:, зачем?

    ipatiev
    @ipatiev Куратор тега PHP
    Потомок старинного рода Ипатьевых-Колотитьевых
    Надо включить информирование об ошибках.
    Тогда сразу станет видно, что код работает не точно так же
    Ответ написан
    Комментировать
  • Тернарный оператор, ?? вместо ?:, зачем?

    @Flying
    Это совсем разные вещи.

    ?? - это null coalescing operator
    ?: - это ternary operator с первым выражением, эквивалентным выражению в левой части оператора.
    Ответ написан
    Комментировать
  • Тернарный оператор, ?? вместо ?:, зачем?

    @Everybody_Lies
    //Null-коалесцентный оператор нужен когда переменная может быть не определена, дабы не делать проверку на isset
    $bar = $foo ?? 'default';   //default
    $bar = $foo ?: 'default';   // Undefined variable $foo
    Ответ написан
    Комментировать
  • Как узнать сумму всех элементов массива без функций?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    Алгоритм называется "используй циклы"
    https://www.php.net/manual/ru/language.control-str...

    while
    do-​while
    for
    foreach

    $sum = 0;
    $arr = [1, 2, 3, 4, 5];
    
    foreach($arr as $val) {
        $sum += $val;
    }
    
    var_dump($sum);
    Ответ написан
    1 комментарий