Команда artisan db для работы с базами данных в Laravel

Раздел: Базы данных и PHP -> Работа с базами данных в PHP

Команда artisan db и её назначение

Как запустить интерактивную консоль базы данных внутри Laravel?

Команда php artisan db открывает REPL (Read–Eval–Print Loop) для подключённой базы данных. Это удобный способ выполнять SQL‑запросы, просматривать структуру таблиц или тестировать соединение без обращения к сторонним клиентам. После ввода команды появится приглашение mysql> (или sqlite> / psql>) в зависимости от используемого драйвера.

php artisan db

Php pdo sqlsrv (pdo для sql server)

После запуска консоль готова принимать любые запросы. Для выхода используется комбинация Ctrl+C или команда quit (для MySQL).

Как подключиться к определённой базе данных?

Если в проекте настроено несколько соединений (config/database.php), можно указать нужное через флаг --database:

php artisan db --database=mysql_legacy

Php artisan db (команда artisan db в laravel)

Команда откроет консоль для соединения mysql_legacy. Это полезно, когда требуется быстро переключаться между базами без ручного ввода параметров.

Как выполнить один запрос и сразу завершить сеанс?

Команда artisan db сама по себе не принимает SQL как аргумент, но можно передать запрос через стандартный ввод Unix:

echo "SELECT COUNT(*) FROM users;" | php artisan db

Php pdo pgsql (pdo для postgresql)

Такой подход подходит для автоматизации (скрипты, CI/CD). Вывод будет содержать только результаты запроса.

Какие типичные ошибки возникают при работе с консолью?

Проблема: при запуске команды возникает ошибка "Class 'Doctrine\DBAL\Driver\PDOMySql\Driver' not found" или не поддерживается драйвер. Решение: убедиться, что в проекте установлен пакет doctrine/dbal (требуется для некоторых команд, хотя для db это не обязательно, но может возникать при конфликте версий). Достаточно выполнить composer require doctrine/dbal.

Проблема: консоль открывается, но не отвечает на запросы. Частая причина - неправильная настройка соединения в .env или использование неподдерживаемого драйвера. Следует проверить, что драйвер (mysql, pgsql, sqlite) указан верно и сервер БД запущен.

Проблема: для SQLite консоль не отображает приглашение. Команда всё равно работает, но вывод может быть минимальным. Рекомендуется выполнить пару тестовых запросов, чтобы убедиться в работоспособности.

Как использовать консоль для отладки медленных запросов?

Внутри REPL можно включать профайлер и тайминги. Для MySQL используется команда SET profiling = 1;. После выполнения запроса SHOW PROFILES; покажет время выполнения. В PostgreSQL аналогичную роль играет \timing (доступно в psql).

mysql> SET profiling = 1;
mysql> SELECT * FROM orders WHERE total > 1000;
mysql> SHOW PROFILES;

Это позволяет анализировать производительность прямо из консоли Laravel.

- Table user php (таблица user в php)
- Admin db php (администрирование базы данных в php)
- Php db query (выполнение запроса к базе данных в php)

Расширенные примеры работы с artisan db

Пример 1. Подключение к SQLite и выполнение нескольких запросов

Пример
# Предварительно создать базу (если не существует)
touch database/database.sqlite

# Запустить консоль, указав соединение sqlite
php artisan db --database=sqlite

Внутри консоли:

Пример
sqlite> CREATE TABLE test (id INTEGER PRIMARY KEY, name TEXT);
sqlite> INSERT INTO test VALUES (1, 'Alice');
sqlite> SELECT * FROM test;
1|Alice

Пример 2. Выполнение транзакции в консоли

Пример
php artisan db
Пример
mysql> START TRANSACTION;
mysql> UPDATE accounts SET balance = balance - 100 WHERE id = 1;
mysql> UPDATE accounts SET balance = balance + 100 WHERE id = 2;
mysql> COMMIT;
mysql> SELECT * FROM accounts;

В случае ошибки можно откатить командой ROLLBACK.

Пример 3. Передача SQL через конвейер с heredoc

Пример
# В Bash
db_query=$(cat <

Флаг --quiet подавляет лишние сообщения. Вывод содержит только результат запроса.

+-------------+----------+
| total_users | avg_age  |
+-------------+----------+
|        150  |  34.2000 |
+-------------+----------+

Пример 4. Использование с PostgreSQL и просмотр плана запроса

Пример
php artisan db --database=pgsql
Пример
psql> EXPLAIN ANALYZE SELECT * FROM orders WHERE created_at > now() - interval '1 day';

Это показывает фактический план выполнения и затраты времени - полезно для настройки индексов.

Пример 5. Комбинирование с artisan tinker и DB фасадом

Хотя artisan db - это отдельная команда, иногда удобно выполнять сложные операции прямо в REPL базы. Но если требуется доступ к Eloquent, лучше использовать php artisan tinker. В db работа ведётся только на уровне SQL.

Пример 6. Автоматизация дампа схемы через консоль

Пример
echo "SHOW CREATE TABLE users;" | php artisan db | grep -A 20 "CREATE TABLE" > schema.sql

Позволяет получить DDL таблицы без использования сторонних утилит.

Команда artisan db в Laravel - comments

En
Php artisan db (php)