Простой, но полезный приём для дебага в Laravel — логирование SQL-запросов в человекочитаемом виде.
По умолчанию
Вот сниппет, который собирает полный SQL-запрос с подставленными значениями:
📌 Пример:
Очень удобно, когда ты хочешь понять, почему условие WHERE не сработало или почему запрос медленный.
Можно кинуть это в
📲 Мы в MAX
👉 @php_lib
По умолчанию
DB::listen() в Laravel выводит запрос с плейсхолдерами ?, а значения параметров идут отдельно. Это не всегда удобно — сложно быстро понять, что реально выполняется.Вот сниппет, который собирает полный SQL-запрос с подставленными значениями:
DB::listen(function ($query) {
$sql = $query->sql;
foreach ($query->bindings as $binding) {
$binding = is_numeric($binding) ? $binding : "'{$binding}'";
$sql = preg_replace('/\?/', $binding, $sql, 1);
}
logger()->info("Executed query: {$sql}");
});
📌 Пример:
select * from users where email = 'john@example.com' and age > 18
Очень удобно, когда ты хочешь понять, почему условие WHERE не сработало или почему запрос медленный.
Можно кинуть это в
AppServiceProvider::boot(), и на локальной машине всегда видеть, что реально уходит в базу.📲 Мы в MAX
👉 @php_lib
👍5
Как правильно работать с большими массивами данных в PHP, чтобы не убить память и сервер.
Когда мы пишем скрипты, которые обрабатывают тысячи (или миллионы) строк — будь то импорт из CSV, выгрузка из БД или массовая обработка, — часто допускается ошибка: всё грузится в память сразу. В итоге сервер умирает от нехватки памяти, а скрипт - от таймаута.
Что делать?
1. Частями, а не всё сразу
Например, если вы работаете с PDO:
Так данные не будут храниться в огромном массиве — обработка идёт построчно.
2. Используйте генераторы
Генераторы (
Память почти не растёт — магия генераторов.
3. Разбивайте на батчи
Иногда эффективнее брать кусками:
4. Не забывайте про стриминг файлов
Если это CSV или JSON — читайте построчно через
Такие подходы сильно упрощают жизнь и экономят ресурсы.
А вы как работаете с большими данными? Используете генераторы или предпочитаете батчи?
📲 Мы в MAX
👉 @php_lib
Когда мы пишем скрипты, которые обрабатывают тысячи (или миллионы) строк — будь то импорт из CSV, выгрузка из БД или массовая обработка, — часто допускается ошибка: всё грузится в память сразу. В итоге сервер умирает от нехватки памяти, а скрипт - от таймаута.
Что делать?
1. Частями, а не всё сразу
Например, если вы работаете с PDO:
$stmt = $pdo->query("SELECT * FROM big_table");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
process($row); // Обрабатываем каждую строку на лету
}
Так данные не будут храниться в огромном массиве — обработка идёт построчно.
2. Используйте генераторы
Генераторы (
yield) позволяют работать с большими данными лениво:
function getRows($pdo) {
$stmt = $pdo->query("SELECT * FROM big_table");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
yield $row;
}
}
foreach (getRows($pdo) as $row) {
process($row);
}
Память почти не растёт — магия генераторов.
3. Разбивайте на батчи
Иногда эффективнее брать кусками:
$limit = 1000;
for ($offset = 0; ; $offset += $limit) {
$rows = $pdo->query("SELECT * FROM big_table LIMIT $limit OFFSET $offset")->fetchAll();
if (!$rows) break;
foreach ($rows as $row) {
process($row);
}
}
4. Не забывайте про стриминг файлов
Если это CSV или JSON — читайте построчно через
fgets() или stream_get_line(), а не file_get_contents().Такие подходы сильно упрощают жизнь и экономят ресурсы.
А вы как работаете с большими данными? Используете генераторы или предпочитаете батчи?
📲 Мы в MAX
👉 @php_lib
👍5🔥4
🔥 Полезная фича в Laravel: скрываем данные с помощью
Метод
💡 Небольшой совет: Начиная с версии Laravel 8.69, этот метод встроен "из коробки" и отлично подходит для безопасного отображения email-адресов, номеров телефонов или токенов.
Как это выглядит на практике:
#laravel #php #webdev #советы_разработчикам
📲 Мы в MAX
👉 @php_lib
Str::mask()Метод
Str::mask() позволяет легко замаскировать часть строки определенным символом (например, *).💡 Небольшой совет: Начиная с версии Laravel 8.69, этот метод встроен "из коробки" и отлично подходит для безопасного отображения email-адресов, номеров телефонов или токенов.
Как это выглядит на практике:
$userEmail = 'username@domain.com';
$maskedEmail = Str::mask($userEmail, '*', 4);
// Результат: user***************
// Если передать отрицательное число в качестве третьего аргумента,
// маскировка начнется с конца строки:
$maskedEmail = Str::mask($userEmail, '*', -16, 6);
// Результат: use******domain.com
#laravel #php #webdev #советы_разработчикам
📲 Мы в MAX
👉 @php_lib
👍2❤1🔥1