Việc thiết lập kết nối cơ sở dữ liệu là một trong những bước đầu tiên và quan trọng nhất khi bắt đầu xây dựng bất kỳ ứng dụng web nào. Với Laravel, quá trình này đã được tối ưu hóa cực kỳ gọn gàng thông qua tệp cấu hình môi trường. Bài viết này sẽ hướng dẫn bạn chi tiết cách kết nối MySQL với Laravel một cách nhanh chóng, chuẩn xác và cách xử lý nhanh các lỗi thường gặp.
1. Chuẩn bị trước khi kết nối
Trước khi cấu hình kết nối trong Laravel, hệ thống của bạn cần đảm bảo đã đáp ứng đủ các điều kiện sau:
- Đã cài đặt PHP và Composer trên máy tính.
- Đã khởi tạo một project Laravel thành công (nếu bạn mới bắt đầu, hãy tham khảo các bước thiết lập đầu tiên tại chuyên mục thủ thuật để nắm vững cấu trúc thư mục).
- Đã cài đặt hệ quản trị cơ sở dữ liệu MySQL (thường có sẵn trong các gói như XAMPP, Laragon hoặc chạy độc lập).
2. Tạo Database mới cho dự án
Trước tiên, bạn cần truy cập vào MySQL (qua phpMyAdmin, Navicat, DBeaver hoặc dòng lệnh MySQL) và tạo một database mới cho dự án của mình.
Ví dụ, bạn tạo một database có tên là laravel_shop. Hãy ghi nhớ tên database này vì chúng ta sẽ cần khai báo nó ở bước tiếp theo.
3. Cấu hình thông số kết nối trong file .env
Laravel sử dụng file .env nằm ở thư mục gốc của project để lưu trữ các thông tin cấu hình môi trường, bao gồm cả thông tin kết nối cơ sở dữ liệu.
Bạn mở file .env bằng trình soạn thảo code (VS Code, PhpStorm…) và tìm đến đoạn mã cấu hình database như sau:
Đoạn mã
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_shop
DB_USERNAME=root
DB_PASSWORD=
Giải thích chi tiết các thông số:
- DB_CONNECTION: Loại cơ sở dữ liệu bạn đang sử dụng (mặc định là mysql).
- DB_HOST: Địa chỉ máy chủ chứa database. Nếu chạy trên máy cá nhân, giữ nguyên 127.0.0.1 hoặc localhost.
- DB_PORT: Cổng kết nối của MySQL (mặc định của MySQL là 3306).
- DB_DATABASE: Tên database bạn vừa tạo ở bước 2 (ví dụ: laravel_shop).
- DB_USERNAME: Tên tài khoản đăng nhập MySQL (mặc định của XAMPP/Laragon thường là root).
- DB_PASSWORD: Mật khẩu đăng nhập MySQL (mặc định của XAMPP/Laragon thường để trống, nếu bạn có đặt mật khẩu hãy điền vào đây).
Lưu ý: Sau khi sửa file .env, nếu ứng dụng đang chạy (chạy lệnh php artisan serve), bạn nên tắt đi và bật lại để Laravel cập nhật cấu hình mới.
4. Kiểm tra kết nối cơ sở dữ liệu
Sau khi đã cấu hình xong, cách nhanh nhất và chính xác nhất để kiểm tra xem Laravel đã kết nối thành công với MySQL hay chưa là sử dụng lệnh Migration hoặc Tinker.
Cách 1: Sử dụng Laravel Artisan Migration
Laravel đã tích hợp sẵn một vài bảng mẫu (như bảng users, password_resets, failed_jobs) trong thư mục database/migrations. Bạn chỉ cần mở terminal tại thư mục project và chạy lệnh:
Bash
php artisan migrate
Nếu terminal hiển thị thông báo dạng như sau, chúc mừng bạn đã kết nối thành công:
Plaintext
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated: 2014_10_12_000000_create_users_table
Lúc này, bạn hãy mở phần mềm quản lý MySQL lên và kiểm tra xem các bảng trên đã xuất hiện trong database laravel_shop chưa.
Cách 2: Sử dụng Artisan Tinker
Bạn cũng có thể kiểm tra kết nối bằng công cụ dòng lệnh tương tác Tinker của Laravel:
Bash
php artisan tinker
Sau đó gõ lệnh kiểm tra kết nối DB:
PHP
use Illuminate\Support\Facades\DB;
DB::connection()->getPdo();
Nếu màn hình trả về một đối tượng PDO (ví dụ: Illuminate\Database\Pdo\MysqlConnection), nghĩa là kết nối đã hoàn toàn thông suốt. Bạn có thể gõ exit để thoát khỏi Tinker.
5. Các lỗi kết nối MySQL thường gặp và cách khắc phục
Trong quá trình kết nối, đôi khi bạn sẽ gặp phải một số lỗi phổ biến. Dưới đây là cách xử lý nhanh:
- Lỗi SQLSTATE[HY000] [1045] Access denied for user…: Lỗi này do sai tên đăng nhập (DB_USERNAME) hoặc mật khẩu (DB_PASSWORD). Hãy kiểm tra lại quyền truy cập MySQL của bạn.
- Lỗi SQLSTATE[HY000] [2002] Connection refused: Lỗi này xảy ra do dịch vụ MySQL chưa được khởi động (chưa bật XAMPP/Laragon/MySQL Service) hoặc bạn điền sai DB_HOST / DB_PORT.
- Lỗi Specified key was too long error (khi chạy migrate trên MySQL phiên bản cũ): Bạn có thể cấu hình lại độ dài chuỗi mặc định trong file app/Providers/AppServiceProvider.php bằng cách thêm Schema::defaultStringLength(191); vào phương thức boot.
Việc thiết lập kết nối MySQL chuẩn chỉnh sẽ là bệ phóng vững chắc để bạn tiếp tục xây dựng các tính năng phức tạp hơn. Để tìm hiểu thêm nhiều kiến thức thực chiến và hệ thống hóa toàn bộ lộ trình phát triển ứng dụng, bạn có thể ghé thăm website Học Laravel để đón đọc những bài viết mới nhất mỗi ngày.
