Способы улучшения производительности баз данных для приложений Laravel с использованием ORM Eloquent.
#Eloquent #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2❤1
Его можно получить, выполнив команду:
php artisan route:list --only-vendor
Это удобно для аудита маршрутов и выявления тех, о которых вы могли не знать, чтобы гарантировать, что они заблокированы и безопасны!
#Laravel #Route #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
Иногда возникает необходимость привязать примитив к значению, например, к значению конфигурации. Вместо того чтобы использовать
give() с обратным вызовом, Laravel предоставляет сокращение giveConfig, делающее именно это #Laravel #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2❤1
В SQL-запросе операторы выполняются в следующем порядке:
1.
FROM / JOIN2.
WHERE3.
GROUP BY4.
HAVING5.
SELECT6.
DISTINCT7.
ORDER BY8.
LIMIT / OFFETПриемы, применяемые на каждом этапе, помогают ускорить выполнение следующих шагов. Поэтому важно знать порядок их выполнения. Чтобы добиться максимальной эффективности, сосредоточьтесь на оптимизации шагов, расположенных на более ранних этапах запроса.
С учётом этого рассмотрим некоторые советы по оптимизации:
Максимизируйте выражение `
WHERE`.Это выражение выполняется раньше, поэтому оно предоставляет хорошую возможность уменьшить размер набора данных до того, как будет обработана остальная часть запроса.
Фильтруйте строки перед `
JOIN`Хотя запрос
FROM/JOIN выполняется первым, всё равно можно ограничить количество строк. Чтобы ограничить количество присоединяемых строк, используйте подзапрос в операторе FROM вместо таблицы.Используйте `
WHERE` вместо `HAVING`Выражение
HAVING выполняется после WHERE и GROUP BY. Это означает, что при возможности стоит перенести все необходимые условия в выражение WHERE.Не путайте `
LIMIT`, `OFFSET` и `DISTINCT` с методами оптимизацииЛегко предположить, что они повышают производительность за счет минимизации набора данных, но это не так. Поскольку они выполняются в конце запроса, они практически не влияют на его производительность.
#SQL #DataBase #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Перед развертыванием проекта Laravel убедитесь, что параметры безопасности и стабильности правильно настроены. Вот несколько важных настроек, которые необходимо добавить в сервис провайдер (например,
AppServiceProvider).Принудительное использование HTTPS для всех URL-адресов (кроме локального окружения):
private function enforceSecureUrls(): void
{
if (!$this->app->environment('local')) {
URL::forceScheme('https');
}
}
Отключение опасных SQL команд (
DROP, TRUNCATE) в продакшне:DB::prohibitDestructiveCommands($this->app->isProduction());
Ускоряет работу приложения в продакшне:
php artisan config:cache
php artisan route:cache
Добавьте
enforceSecureUrls() и DB::prohibitDestructiveCommands() в метод boot() своего AppServiceProvider:public function boot(): void
{
$this->enforceSecureUrls();
DB::prohibitDestructiveCommands($this->app->isProduction());
}
#Laravel #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍1
В PHP 8.4 появилось мощное обновление — теперь можно выбирать элементы DOM с помощью CSS селекторов, как в JavaScript! Встречайте новые методы:
querySelector() и querySelectorAll().Примеры использования
$dom = new DOMDocument();
$dom->loadHTML('
<div id="title">Title by ID</div>
<div class="header">Title by class</div>
');
// По ID
$title = $dom->querySelector('#title');
echo $title->textContent; // Title по ID
// По классу
$header = $dom->querySelector('.header');
echo $header->textContent; // Title по классу
$dom = new DOMDocument();
$dom->loadHTML('
<ul>
<li class="item">Item 1</li>
<li class="item">Item 2</li>
</ul>
');
$items = $dom->querySelectorAll('.item');
foreach ($items as $item) {
echo $item->textContent . "\n";
}
✨ Почему это замечательно:
✅ Знакомый синтаксис CSS — чистый и интуитивно понятный
✅ Меньше шаблонов — больше никаких вложенных циклов или
getElementsBy...()✅ Точный выбор элемента — по идентификатору, классу, тегу или любой комбинации
📌 Теперь работа с HTML в PHP похожа на JavaScript — и это намного удобнее!
#PHP #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤2👍2🤨1
Начиная с Laravel 11+, фреймворк представил мощную функцию —
Context, позволяющую хранить временные данные в рамках одного запроса, задания или консольной команды. А в Laravel 12 она стала ещё лучше — теперь контекст автоматически внедряется в логи, HTTP-запросы, события и исключения.Примеры использования в приложении Laravel:
use Illuminate\Support\Facades\Context;
use Illuminate\Support\Str;
Context::add('trace_id', (string) Str::uuid());
Context::add('app_section', 'checkout');
Context::add('server', gethostname());
Context::add('currency', 'USD');
📄 В контроллерах, логах или событиях:
Log::info('Payment started in section [{app_section}].', [
'user_id' => $user->id,
'amount' => $amount,
]);Http::withHeaders([
'X-Trace-Id' => Context::get('trace_id'),
])->post('https://api.payment.com/charge', [...]);
📌 Думайте о
Context как о «временном хранилище данных», которое может использоваться во всех приложениях и не нужно повсеместно передавать переменные. Это чистый, современный способ отслеживания и управления данными, относящимися к конкретным запросам.#Laravel #Context #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
В PHP 8.1 появились
callable объекты первого класса. Они могут добавлять синтаксический сахар, особенно при работе с коллекциями Laravel, где часто используются замыкания #PHP #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Вам приходилось контролировать, что пользователь вводит необходимые аргументы в консоли? Laravel поставляется с контрактом
PromptsForMissingInput для автоматической подсказки пользователю о пропущенных аргументах #Laravel #tips
Please open Telegram to view this post
VIEW IN TELEGRAM
shouldRun().Как следует из названия, метод возвращает логическое значение, определяющее, должен ли Laravel запустить миграцию.
Этот метод может быть полезен в сценариях, когда необходимо условно выполнить определенные миграции в зависимости от условий запуска.
Например, можно создать таблицу реферальных программ, только если она включена в конфигурации
#Laravel #tips
Please open Telegram to view this post
VIEW IN TELEGRAM