• Есть ли в laravel обычная модель, не Eloquent ORM?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    Это обычный класс. Есть ли в РНР классы? Опять же, для обработки конкретно форм есть FormRequest'ы, для валидации всего прочего есть просто валидатор.
    Ответ написан
    6 комментариев
  • Какую взять ORM для своего проекта?

    @D3lphi
    Возьмем ORM из двух популярных PHP-фреймворков. Первая будет Eloquent ("Родная" для фреймворка Laravel), а вторая - Doctrine (Одна из доступных ORM в фреймворке Symfony). Кардинальным отличием этих двух "систем" является то, что первая разработана на основе паттерна Active Record, а вторая - с использованием паттерна Data mapper. Чем же они отличаются? Приведу абстрактные примеры кода для первого и второго паттерна:

    Active Record:
    $user = new User(); // Создаем "сущность" нового пользователя.
    $user->login = 'D3lph1'; // Устанавливаем его логин равным 'D3lph1'.
    $user->password = '123456'; // Устанавливаем пароль этому пользователю.
    $user->save(); // Сохраняем пользователя.


    Все, новый пользователь создан и находится в базе данных. Теперь, Data mapper:
    $user = new User();
    $user->login = 'D3lph1'; // Устанавливаем его логин равным 'D3lph1'.
    $user->password = '123456'; // Устанавливаем пароль этому пользователю.
    
    $manager = ... // получаем объект менеджера (Например, из DI контейнера).
    $manager->persist($user); // "Скармливаем" новоиспеченного пользователя нашему менеджеру.
    // $manager->persis($user1); // Мы можем создать еще одного пользователя и уведомить менеджер об этом.
    // $manager->persis($user2); // И еще одного...
    $manager->flush(); // После выполнения этого метода данные отправятся в базу данных.


    Очевидно, первый способ куда проще. Но не все так просто. Дело в том, что паттерн Active Record нарушает принцип единственной ответственности (Single responsibility SOLID). И поэтому, в какой-то степени, может считаться антипаттерном. (Но это ни в коем случае не значит, что его не нужно использовать, для большинства проектов "хватит" за глаза). Наша сущность пользователя делает слишком много. Она не только представляет данные, но и еще работает с ними. В больших проектах это может усложнить поддержку кода. Data mapper, напротив же, разделяет представление данных в сущность (user) и работу с данными (manager, в данном примере. Также, за работу с данными отвечает репозиторий. Вы столкнетесь с ним, как только вам потребуется получить данные из БД (Doctrine)). В небольших проектах вы не заметите особой разницы. Разве что во втором случае увеличится количество классов. Так, в Eloquent вы создаете 1 модель, а в Doctrine - сущность и репозиторий.

    Все современные ORM включают в себя также, так называемые, query builder'ы. Они помогают отказаться от языка запросов, такого как SQL. Вы будете составлять запросы таким образом:
    $result = $qb
          ->select(['id', 'login'])
          ->where('id', '<>', 3)
          ->get();


    Собственно, query builder'ы помогают абстрагироваться от конкретной СУБД. То бишь, вы написали запрос 1 раз, а затем от того, какую СУБД вы используете будет зависеть выходной sql код. Генерация этого кода будет произведена абсолютно прозрачно для вас.

    Обе ORM имеют работать с отношениями. Вам нужно будет указать, как таблицы относятся друг к другу, а затем вы сможете удобно обращаться к связанным сущностям.

    Теперь конкретно. Так как вы только начинаете осваивать ORM, я бы порекомендовал начать с Eloquent. Она гораздо проще, чем Doctrine, да и более производительная, к тому же. Как освоите Eloquent, смело учитесь работать с Doctrine. Она обязательно должна быть "в копилке" ваших скиллов, так как является самой мощной в "мире" PHP.

    Успехов!
    Ответ написан
    2 комментария
  • Как создавать папки с помощью php?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    Тут все что вам нужно
    Ответ написан
    Комментировать
  • Какие есть преимущества у Yii?

    Adobe
    @Adobe
    php developer
    yii это фреймворк для быстрой разработки. Там можно легко и отовсюду получить любые данные (в отличии от Симфони например, где просто так куда захочешь не сунешься). Все зависит от задач. Фреймворк не панацея. Фрэймворк это всего лишь посредник медду пользователем и БД.
    Ответ написан
    7 комментариев
  • Почему роут выкидывает ошибку 404?

    muhammad_97
    @muhammad_97
    PHP-разработчик
    Нужно настроить веб-сервер, чтобы запросы к несуществующим файлам перенаправлялись на index.php.

    nginx
    Apache
    Ответ написан
    Комментировать
  • Почему не работает код?

    @Firik67
    Middle PHP Developer
    1. Поставить IDE, скопировать туда код, посмотреть на ошибку, которая она покажет
    2. Еще раз прочитать про интерфейсы
    3. Понять, что нужно реализовывать ВСЕ методы в реализующем классе, объявленные в интерфейсе
    Ответ написан
    Комментировать
  • Real-time чат с записью в БД Laravel?

    Austin_Powers
    @Austin_Powers
    Web developer (Symfony, Go, Vue.js)
    Можете ratchet использовать. Для ваших целей должен как раз сгодиться. https://github.com/Askedio/laravel-ratchet
    Ответ написан
    Комментировать
  • Порядковый номер обхода foreach?

    27cm
    @27cm
    TODO: Написать статус
    Это и есть "стандартный способ".

    Если массив индексированный, причём с индексами 0, 1, 2, 3..., то можно проще:
    foreach ($arr as $i => $val) {
        // тело цикла
    }


    Если массив ассоциативный, но вам не нужны его ключи:
    foreach (array_values($arr) as $i => $val) {
        // тело цикла
    }
    Ответ написан
    Комментировать
  • Перенаправление laravel на другой домен - как осуществить?

    JhaoDa
    @JhaoDa
    LaravelRUS Team
    redirect()->away('http://exmple.com');
    Ответ написан
    Комментировать
  • Стоит ли использовать G\ library?

    devg
    @devg
    I am Yenior software developer
    Данная библиотека (микрофреймворк) не имеет поддержки Composer, не следует рекомендациям PHP-FIG (PSR) - а это на сегодня must have. Из-за чего использовать G\ в сколько-нибудь серьезных проектах не имеет смысла.

    Из микрофреймворков популярен Slim.
    Можете также рассмотреть Lumen, Zend Expressive, Silex.
    Ответ написан
    Комментировать
  • В чем смысл библиотеки ReactPHP? Какие задачи решает?

    Caravus
    @Caravus
    DevOps
    1) Берём событийную библиотеку
    2) Пишем в коде sleep(10);
    3) ???
    4) Пишем на тостер вопрос "а чёж оно блокирует то?!".
    Ответ написан
    4 комментария
  • Как перезаписать роут в vendor Laravela?

    @Finsh
    Vendor трогать запрещено федеральными и региональными законами всего сущего!
    Если мне не изменяет память, то в 5.3 для разворачивания AdminLTE надо опубликовать фаилы пакета.
    php artisan publish
    Ответ написан
    Комментировать
  • Реально сделать проект по схеме, где фронтенд работает на Node.JS, а бэкенд на php?

    abyrkov
    @abyrkov
    JavaScripter
    Node.js - всегда Backend.
    Ответ написан
    Комментировать
  • Правильный ли план по изучению Битрикс?

    @kirill-93
    Не учите битрикс, не губите себя! Тем более, что это судя по всему первое, что вы учите. Вам будет очень тяжело перейти с него на что-нибудь нормальное.
    Битрикс - один сплошной старый неподдерживаемый говнокод. Вы не сможете получить какие-то определенные знания, чтоб начать в нем разбираться, потому что в нем нет ни единого подхода, ни каких-то правил/принципов, которых придерживаются его разработчики. Вам всегда нужна будет помощь людей, если потребуется выйти за рамки самых стандартных задач.
    Если вы хотите стать хорошим разработчиком, начинайте с голого php и фреймворков, если хотите писать говнокод среднего уровня (уровня сайтов визиток или шаблонных интернет магазинов), учите вордпресс/оперкарт/магенто. Там тоже говнокод, но он простой и понятный, он логичный.
    Битрикс не имеет никакого отношения к программированию, учить его - это как учить интерфейс какой-то программы, очень плохой программы.
    Ответ написан
    5 комментариев
  • Как сделать условие подсчёт кол-во символов?

    nazares
    @nazares
    Software Engineer
    Для кириллицы и прочего УТФу надо php.net/manual/en/function.mb-strlen.php
    Ответ написан
    Комментировать
  • Как сделать динамический title с помощью PHP и MySQL?

    @porozhnyy
    mysql_*
    Вы серьезно? 2017 год на носу, php 7.1 зарелизили...
    Прочитайте документацию по php сначала, советую. И про то, почему сразу $_GET['id'] в запрос писать плохо(sql-инъекция)
    Ответ написан
    Комментировать
  • Как удалить из строки ненужное?

    Fesor
    @Fesor
    Full-stack developer (Symfony, Angular)
    Ответ написан
    Комментировать
  • Как сгруппировать записи по максимальному значению в целле?

    AloneCoder
    @AloneCoder
    [object Object]
    select * from ( select * from mytable order by version desc ) as a group by identity
    Ответ написан
    3 комментария
  • Как сгруппировать записи по максимальному значению в целле?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега SQL
    Седой и строгий
    SELECT mt.* FROM mytable AS mt
    INNER JOIN (
        SELECT MAX(version) AS max_version FROM mytable GROUP BY identity
    ) AS grp
    ON mt.identity = grp.identity AND mt.version = grp.max_version;
    Ответ написан
    Комментировать
  • Как учить что-то новое и быстро не забывать?

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

    PS: уметь кодить и помнить что-то - две абсолютно разные вещи. Практика и теория тут не подходят для сравнения.
    Ответ написан
    Комментировать