Нужно выполнить поиск по нескольким столбцам с одним и тем же условием?
Используй методы
Документация: https://laravel.com/docs/12.x/queries#where-any-all-none-clauses
👉 @PHPgx
Используй методы
whereAny(), whereAll() или whereNone() вместо написания множества условий с OR или AND. Код станет гораздо чище и понятнее!Документация: https://laravel.com/docs/12.x/queries#where-any-all-none-clauses
Please open Telegram to view this post
VIEW IN TELEGRAM
👍21❤6
Как заставить ИИ писать код по стилю
Нашёл оптимизированные для ИИ гайдлайны, специально отформатированные для Claude Code и аналогичных инструментов. Это позволяет генерировать код в соответствии со стандартами Laravel и PHP от Spatie.
Файл с гайдлайнами, адаптированными под ИИ, можно посмотреть здесь: https://spatie.be/guidelines/ai
👉 @PHPgx
Нашёл оптимизированные для ИИ гайдлайны, специально отформатированные для Claude Code и аналогичных инструментов. Это позволяет генерировать код в соответствии со стандартами Laravel и PHP от Spatie.
Файл с гайдлайнами, адаптированными под ИИ, можно посмотреть здесь: https://spatie.be/guidelines/ai
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4❤2
Новое в Laravel 12.21 на этой неделе:
Теперь при запуске
Ранее Laravel показывал это только при запуске с указанием конкретного сидера через
Ссылка на PR:
https://github.com/laravel/framework/pull/56310
👉 @PHPgx
Теперь при запуске
php artisan db:seed будет отображаться время выполнения.Ранее Laravel показывал это только при запуске с указанием конкретного сидера через
--class=SomeSeeder.Ссылка на PR:
https://github.com/laravel/framework/pull/56310
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤3🔥2🌚1
Совет по PHP/Laravel
Когда у тебя есть два варианта обработки пользовательских исключений в рамках одного домена, вместо того чтобы создавать несколько классов исключений, лучше использовать один класс с разными методами!
Это позволяет сделать кодовую базу чище и более организованно
👉 @PHPgx
Когда у тебя есть два варианта обработки пользовательских исключений в рамках одного домена, вместо того чтобы создавать несколько классов исключений, лучше использовать один класс с разными методами!
Это позволяет сделать кодовую базу чище и более организованно
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👎6❤4
Совет по PHP: знали ли вы, что
Функция вернёт
Проверка выполняется слева направо и останавливается при первом необъявленном или
Документация: https://php.net/manual/en/function.isset.php
👉 @PHPgx
isset() может принимать несколько аргументов?Функция вернёт
true только в том случае, если все переданные переменные считаются установленными.Проверка выполняется слева направо и останавливается при первом необъявленном или
null-значении.Документация: https://php.net/manual/en/function.isset.php
Please open Telegram to view this post
VIEW IN TELEGRAM
❤22👍16🤔1
Используйте метод
Это намного быстрее, чем сначала проверять существование записи, особенно при массовых вставках.
Документация: https://laravel.com/docs/12.x/queries#upserts
Примечание: Все базы данных, кроме SQL Server, требуют, чтобы колонки, указанные во втором аргументе метода
Кроме того, драйверы баз данных MariaDB и MySQL игнорируют второй аргумент
👉 @PHPgx
upsert() для эффективных операций "вставить или обновить" в одном SQL-запросе.Это намного быстрее, чем сначала проверять существование записи, особенно при массовых вставках.
Документация: https://laravel.com/docs/12.x/queries#upserts
Примечание: Все базы данных, кроме SQL Server, требуют, чтобы колонки, указанные во втором аргументе метода
upsert, имели первичный или уникальный индекс.Кроме того, драйверы баз данных MariaDB и MySQL игнорируют второй аргумент
upsert и всегда используют первичный и уникальные индексы таблицы для определения существующих записей.Please open Telegram to view this post
VIEW IN TELEGRAM
👍8❤2🔥2
Хорошая статья: Сгенерированные столбцы и представления в SQL: как использовать их в Laravel-приложении
🔹 Что такое сгенерированные столбцы?
🔹 Сравнение: сгенерированные столбцы против аксессоров Eloquent
🔹 Сортировка, фильтрация и индексация
🔹 Получение значений через Eloquent, Query Builder и raw SQL
🔹 Оптимизация производительности
🔹 И всё-таки... всегда ли стоит использовать сгенерированные столбцы?
🔹 Что такое представления?
🔹 Практический пример: первый день в интернет-магазине
🔹 Заключение
Читаем здесь (#en)
👉 @PHPgx
Читаем здесь (#en)
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
Совет по Laravel для API
Хочешь единообразные ответы об успехе и ошибках?
Вот пример кода, который я увидел в одном опенсорс проекте:
Зарегистрируй кастомные функции как макросы (
Конечно, альтернатива — вынести эти методы в трейты или базовый контроллер
👉 @PHPgx
Хочешь единообразные ответы об успехе и ошибках?
Вот пример кода, который я увидел в одном опенсорс проекте:
Зарегистрируй кастомные функции как макросы (
Macro) в фасаде Response через ServiceProvider.Конечно, альтернатива — вынести эти методы в трейты или базовый контроллер
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13🔥5❤2
This media is not supported in your browser
VIEW IN TELEGRAM
Плагин Laravel Idea теперь БЕСПЛАТНЫЙ для пользователей PhpStorm
https://blog.jetbrains.com/phpstorm/2025/07/laravel-idea-is-now-free/
👉 @PHPgx
https://blog.jetbrains.com/phpstorm/2025/07/laravel-idea-is-now-free/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23❤8👍4🤯2🌚2
Нужно добавить несколько колонок в определённую позицию таблицы?
Используйте метод
Ссылка на документацию: https://laravel.com/docs/12.x/migrations#column-order
👉 @PHPgx
Используйте метод
after() вместе с замыканием, чтобы сгруппировать несколько связанных колонок и вставить их после уже существующей колонки.Ссылка на документацию: https://laravel.com/docs/12.x/migrations#column-order
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤1
При создании Eloquent-скоупов, если у вас есть одинаковые скоупы в нескольких моделях, использующие одно и то же имя колонки, указывайте имя таблицы в качестве префикса.
Это поможет избежать SQL-ошибок вида "ambiguous column".
Источник: проект Larasense
https://github.com/nabilhassen/larasense/blob/main/app/Models/Material.php
👉 @PHPgx
Это поможет избежать SQL-ошибок вида "ambiguous column".
Источник: проект Larasense
https://github.com/nabilhassen/larasense/blob/main/app/Models/Material.php
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍2
Нужно получать значения из входных данных в нужном типе, а не всегда как строки?
Используй методы
Больше никакого ручного кастинга.
Документация: https://laravel.com/docs/12.x/requests#retrieving-input
👉 @PHPgx
Используй методы
integer(), boolean(), array(), date() и enum()Больше никакого ручного кастинга.
Документация: https://laravel.com/docs/12.x/requests#retrieving-input
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍4
Совет по Laravel
Используй
Отлично подходит для массового импорта, когда часть данных уже может существовать.
Метод тихо игнорирует ограничения, не выбрасывая исключения.
Ссылка на документацию: https://laravel.com/docs/12.x/queries#insert-statements
👉 @PHPgx
Используй
insertOrIgnore() для вставки записей с пропуском дубликатов без выброса ошибокОтлично подходит для массового импорта, когда часть данных уже может существовать.
Метод тихо игнорирует ограничения, не выбрасывая исключения.
Ссылка на документацию: https://laravel.com/docs/12.x/queries#insert-statements
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍5
Сегодня я узнал о синтаксисе
Выглядит прям как обычное английское предложение, очень читаемо
Источник: https://github.com/laravelstart/laravelstart/blob/main/routes/web.php
👉 @PHPgx
when(app()->isLocal()) в файле маршрутов Laravel.Выглядит прям как обычное английское предложение, очень читаемо
Источник: https://github.com/laravelstart/laravelstart/blob/main/routes/web.php
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9👍4
Тестируем отправку писем в Laravel…
не отправив ни одного реального письма.
1️⃣
2️⃣ Запускаем нужное действие
3️⃣ Проверяем, что Mailable был поставлен в очередь
4️⃣ Валидируем получателя, тему, теги и метаданные
Полный разбор на Laravel + Pest:
https://youtu.be/6Zyp2MENadk
👉 @PHPgx
не отправив ни одного реального письма.
Mail::fake() — перехватываем отправкуПолный разбор на Laravel + Pest:
https://youtu.be/6Zyp2MENadk
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍2
Наконец-то, как же мне этого не хватало
Теперь можно сгенерировать коллекцию Postman прямо из своих Laravel-роутов
Просто установи пакет👆
https://github.com/yasintqvi/laravel-postman
👉 @PHPgx
Теперь можно сгенерировать коллекцию Postman прямо из своих Laravel-роутов
Просто установи пакет
laravel-postman и выполни https://github.com/yasintqvi/laravel-postman
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤5
Создаем свой пакет на PHP
Пошаговое руководство по созданию пакета на «чистом» PHP: от структуры проекта и настройки composer.json до использования статических анализаторов, тестов, CI‑скриптов с GitHub Actions и публикации пакета на Packagist
https://habr.com/ru/articles/935544/
👉 @PHPgx
Пошаговое руководство по созданию пакета на «чистом» PHP: от структуры проекта и настройки composer.json до использования статических анализаторов, тестов, CI‑скриптов с GitHub Actions и публикации пакета на Packagist
https://habr.com/ru/articles/935544/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤4