Trong chủ đề này, chúng ta sẽ học cách làm việc với cơ sở dữ liệu và chạy các truy vấn trong một ứng dụng. Có nhiều cách để làm việc với cơ sở dữ liệu và cách đầu tiên là sử dụng các truy vấn sql thô trong một ứng dụng và cách thứ hai là sử dụng mô hình hùng hồn cũng cung cấp sự tương tác với cơ sở dữ liệu.
Các bài viết liên quan:
Hướng dẫn cấu hình kết nối Database trong Laravel
Để cấu hình kết nối Database trong Laravel, bạn có thể làm theo các bước sau:
Bước 1: Mở tệp .env
trong thư mục gốc của dự án Laravel.
Bước 2: Tìm các biến môi trường liên quan đến cấu hình Database. Các biến thường là DB_CONNECTION
, DB_HOST
, DB_PORT
, DB_DATABASE
, DB_USERNAME
, DB_PASSWORD
.
Bước 3: Sửa các giá trị của các biến trên theo cấu hình Database của bạn. Ví dụ:
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=mydatabase DB_USERNAME=root DB_PASSWORD=
Bước 4: Lưu tệp .env
.
Bước 5: Laravel sử dụng tệp cấu hình config/database.php
để đọc cấu hình Database. Nếu bạn muốn thay đổi cấu hình ở đây thay vì trong tệp .env
, bạn có thể làm như sau:
- Mở tệp
config/database.php
. - Tìm mảng ‘connections’ và sửa các giá trị tương ứng với cấu hình Database của bạn.
Ví dụ:
'connections' => [ 'mysql' => [ 'driver' => 'mysql', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', '3306'), 'database' => env('DB_DATABASE', 'forge'), 'username' => env('DB_USERNAME', 'forge'), 'password' => env('DB_PASSWORD', ''), // ... ], ],
Laravel hỗ trợ nhiều loại driver Database như MySQL, PostgreSQL, SQLite, SQL Server và nhiều hơn nữa. Bạn có thể thay đổi driver bằng cách thay đổi giá trị của DB_CONNECTION
.
Sau khi hoàn thành cấu hình, Laravel sẽ sử dụng các thông tin kết nối này để thiết lập kết nối với Database trong quá trình phát triển ứng dụng.
Lưu ý: Đảm bảo rằng bạn đã cài đặt và cấu hình đúng Database trước khi tiến hành cấu hình kết nối trong Laravel.
Xem thêm Quan niệm về Database trong Flutter
CRUD Operations trong Laravel: Tạo, Đọc, Sửa, Xóa dữ liệu
Trong Laravel, CRUD (Create, Read, Update, Delete) Operations là các hoạt động cơ bản để thao tác với dữ liệu trong Database. Dưới đây là hướng dẫn cơ bản về cách thực hiện các hoạt động CRUD trong Laravel:
- Tạo dữ liệu (Create):
- Định nghĩa một Route để xử lý yêu cầu tạo mới dữ liệu từ người dùng.
- Trong Controller tương ứng, sử dụng phương thức
create
để tạo một bản ghi mới trong Database.
- Đọc dữ liệu (Read):
- Định nghĩa một Route để xử lý yêu cầu đọc dữ liệu từ người dùng.
- Trong Controller tương ứng, sử dụng phương thức
all
hoặcfind
để truy vấn dữ liệu từ Database và trả về cho người dùng.
- Sửa dữ liệu (Update):
- Định nghĩa một Route để xử lý yêu cầu sửa đổi dữ liệu từ người dùng.
- Trong Controller tương ứng, sử dụng phương thức
find
để tìm bản ghi cần sửa đổi trong Database. - Sử dụng phương thức
update
để cập nhật thông tin của bản ghi.
- Xóa dữ liệu (Delete):
- Định nghĩa một Route để xử lý yêu cầu xóa dữ liệu từ người dùng.
- Trong Controller tương ứng, sử dụng phương thức
find
để tìm bản ghi cần xóa trong Database. - Sử dụng phương thức
delete
để xóa bản ghi khỏi Database.
Đây chỉ là một phần nhỏ của quy trình thực hiện CRUD Operations trong Laravel. Bạn cần tìm hiểu thêm về Laravel và quy tắc của nó để triển khai CRUD Operations một cách đầy đủ và tốt nhất trong ứng dụng của mình.
Xem thêm Drop Database trong MongoDB
Ví dụ về CRUD trong laravel
Dưới đây là một ví dụ cơ bản về cách triển khai CRUD Operations trong Laravel:
- Tạo dữ liệu (Create):
router
Route::post('/products', 'ProductController@store');
Controller:
public function store(Request $request) { $product = new Product; $product->name = $request->input('name'); $product->price = $request->input('price'); $product->save(); return redirect('/products')->with('success', 'Product created successfully'); }
- Đọc dữ liệu (Read):
Route:
Route::get('/products', 'ProductController@index');
Controller:
public function index() { $products = Product::all(); return view('products.index', ['products' => $products]); }
View:products/index.blade.php
@foreach($products as $product) <p>{{ $product->name }} - {{ $product->price }}</p> @endforeach
- Sửa dữ liệu (Update):
Route:
Route::put('/products/{id}', 'ProductController@update');
Controller:
public function update(Request $request, $id) { $product = Product::find($id); $product->name = $request->input('name'); $product->price = $request->input('price'); $product->save(); return redirect('/products')->with('success', 'Product updated successfully'); }
- Xóa dữ liệu (Delete):
Route::delete('/products/{id}', 'ProductController@destroy');
Controller:
public function destroy($id) { $product = Product::find($id); $product->delete(); return redirect('/products')->with('success', 'Product deleted successfully'); }
Đây là một ví dụ đơn giản về cách triển khai CRUD Operations trong Laravel. Bạn có thể tùy chỉnh các Route, Controller và View theo yêu cầu cụ thể của ứng dụng của bạn.
Xem thêm Lịch sử của Laravel
Sử dụng Eloquent ORM trong Laravel để tương tác với Database
Eloquent ORM là một phần của Laravel giúp tương tác với cơ sở dữ liệu một cách dễ dàng và trực quan. Nó cung cấp các phương thức và các mô hình (models) để thao tác dữ liệu trong cơ sở dữ liệu mà không cần viết câu truy vấn SQL trực tiếp. Dưới đây là một số ví dụ về cách sử dụng Eloquent ORM trong Laravel:
- Lấy tất cả các bản ghi từ một bảng:
$users = User::all();
- Lấy một bản ghi dựa trên khóa chính:
$user = User::find($id);
- Lấy một bản ghi dựa trên điều kiện:
$users = User::where('age', '>', 18)->get();
- Tạo một bản ghi mới:
$user = new User; $user->name = 'John Doe'; $user->email = 'john@example.com'; $user->save();
- Cập nhật một bản ghi:
$user = User::find($id); $user->name = 'Jane Doe'; $user->save();
- Xóa một bản ghi:
$user = User::find($id); $user->delete();
- Quan hệ giữa các bảng (Relationships):
public function posts() { return $this->hasMany(Post::class); } public function user() { return $this->belongsTo(User::class); } // Lấy tất cả bài viết của một người dùng $user = User::find($id); $posts = $user->posts;
Đây chỉ là một số ví dụ đơn giản về cách sử dụng Eloquent ORM trong Laravel. Eloquent cung cấp nhiều phương thức khác để thao tác dữ liệu và quản lý quan hệ giữa các bảng. Bạn có thể tìm hiểu thêm trong tài liệu chính thức của Laravel về Eloquent ORM để biết thêm chi tiết và các tính năng mạnh mẽ khác.
Xem thêm Tạo Database trong MongoDB
Query Builder trong Laravel: Xây dựng câu truy vấn mạnh mẽ và linh hoạt
Trong Laravel, Query Builder là một công cụ mạnh mẽ để xây dựng câu truy vấn cơ sở dữ liệu một cách linh hoạt và dễ đọc. Nó cho phép bạn tương tác với cơ sở dữ liệu bằng cách sử dụng phương thức chuỗi để xây dựng câu truy vấn SQL mà không cần viết trực tiếp các câu truy vấn SQL.
Dưới đây là một số ví dụ về cách sử dụng Query Builder trong Laravel:
- Lấy tất cả bản ghi từ một bảng:
$users = DB::table('users')->get();
- Lấy một bản ghi dựa trên điều kiện:
$user = DB::table('users')->where('id', $id)->first();
- Lấy một trường cụ thể từ một bản ghi:
$name = DB::table('users')->where('id', $id)->value('name');
- Thêm một bản ghi mới vào bảng:
DB::table('users')->insert([ 'name' => 'John Doe', 'email' => 'john@example.com', ]);
- Cập nhật một bản ghi:
DB::table('users') ->where('id', $id) ->update(['name' => 'Jane Doe']);
- Xóa một bản ghi:
DB::table('users')->where('id', $id)->delete();
- Kết hợp các điều kiện:
$users = DB::table('users') ->where('votes', '>', 100) ->orWhere('name', 'John') ->get();
- Sử dụng câu truy vấn join:
$users = DB::table('users') ->join('contacts', 'users.id', '=', 'contacts.user_id') ->select('users.*', 'contacts.phone') ->get();
Đây chỉ là một số ví dụ đơn giản về cách sử dụng Query Builder trong Laravel. Query Builder cung cấp rất nhiều phương thức khác nhau để xây dựng và thực thi các câu truy vấn phức tạp. Bạn có thể tìm hiểu thêm trong tài liệu chính thức của Laravel về Query Builder để biết thêm chi tiết và các tính năng mạnh mẽ khác.
Xem thêm DROP Database trong SQL
Migrations trong Laravel: Quản lý phiên bản cơ sở dữ liệu
Trong Laravel, Migrations là một tính năng quan trọng giúp quản lý phiên bản cơ sở dữ liệu của ứng dụng. Nó cho phép bạn xác định và duy trì cấu trúc cơ sở dữ liệu một cách dễ dàng và nhất quán giữa các môi trường phát triển và triển khai.
Migrations cho phép bạn tạo, chỉnh sửa và xóa các bảng và cột trong cơ sở dữ liệu bằng cách sử dụng mã PHP, mà không cần phải thực hiện các thao tác thủ công trên cơ sở dữ liệu. Bằng cách sử dụng Migrations, bạn có thể quản lý lịch sử thay đổi cấu trúc cơ sở dữ liệu và dễ dàng áp dụng các thay đổi này trên các môi trường khác nhau.
Dưới đây là một số ví dụ về cách sử dụng Migrations trong Laravel:
- Tạo một migration mới:
php artisan make:migration create_users_table
Điều này sẽ tạo ra một tệp migration mới trong thư mụcdatabase/migrations
, bạn có thể chỉnh sửa nội dung của tệp này để xác định cấu trúc bảng bạn muốn tạo. - Chạy migration để áp dụng các thay đổi cơ sở dữ liệu:
php artisan migrate
Lệnh trên sẽ chạy tất cả các migration chưa được chạy trước đó và áp dụng các thay đổi cơ sở dữ liệu tương ứng. - Hoàn tác migration:
php artisan migrate:rollback
Lệnh trên sẽ hoàn tác migration cuối cùng đã chạy, tức là rollback các thay đổi đã được áp dụng trước đó trên cơ sở dữ liệu. - Tạo migration cho việc chỉnh sửa cấu trúc cơ sở dữ liệu:
php artisan make:migration add_email_to_users_table --table=users
Điều này sẽ tạo ra một tệp migration mới để thêm một cột “email” vào bảng “users”. Bạn có thể chỉnh sửa nội dung của tệp migration này để xác định thay đổi cần thiết.
Migrations trong Laravel cung cấp nhiều tính năng và quyền điều khiển mạnh mẽ để quản lý cấu trúc cơ sở dữ liệu. Bạn có thể tìm hiểu thêm trong tài liệu chính thức của Laravel về Migrations để biết thêm chi tiết và các tính năng khác như rollback, ….
Seeders và Factories trong Laravel: Tạo dữ liệu mẫu cho cơ sở dữ liệu
Trong Laravel, Seeders và Factories là hai tính năng quan trọng giúp tạo dữ liệu mẫu (dummy data) cho cơ sở dữ liệu của ứng dụng. Seeders được sử dụng để định nghĩa dữ liệu mẫu và Factories được sử dụng để tạo ra các bản ghi mẫu dựa trên các định nghĩa.
Dưới đây là cách sử dụng Seeders và Factories trong Laravel:
- Tạo một Seeder mới:
php artisan make:seeder UsersTableSeeder
Điều này sẽ tạo ra một tệp Seeder mới trong thư mụcdatabase/seeders
, bạn có thể chỉnh sửa nội dung của tệp này để xác định dữ liệu mẫu bạn muốn tạo. - Sửa tệp Seeder để định nghĩa dữ liệu mẫu:Trong tệp Seeder, bạn có thể sử dụng các phương thức như
insert
hoặccreate
để thêm dữ liệu vào cơ sở dữ liệu.- Ví dụ:
public function run() { DB::table('users')->insert([ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => bcrypt('secret'), ]); }
Bạn có thể định nghĩa nhiều phương thứcrun
trong Seeder để tạo dữ liệu cho nhiều bảng hoặc cấu trúc dữ liệu khác nhau.
- Ví dụ:
- Chạy Seeder để tạo dữ liệu mẫu:
php artisan db:seed --class=UsersTableSeeder
Lệnh trên sẽ chạy Seeder đã được chỉ định và tạo ra dữ liệu mẫu trong cơ sở dữ liệu. - Tạo Factory để tạo bản ghi mẫu:Để tạo các bản ghi mẫu cho một bảng, bạn cần định nghĩa Factory tương ứng cho bảng đó. Ví dụ, để tạo Factory cho bảng “users”, bạn có thể sử dụng lệnh sau:
php artisan make:factory UserFactory --model=User
Điều này sẽ tạo ra một tệp Factory mới trong thư mụcdatabase/factories
, bạn có thể chỉnh sửa nội dung của tệp này để định nghĩa các giá trị mẫu cho các trường trong bảng. - Sử dụng Factory để tạo dữ liệu mẫu:Trong Seeder hoặc bất kỳ nơi nào bạn muốn tạo dữ liệu mẫu, bạn có thể sử dụng Factory để tạo ra các bản ghi mẫu.
Sử dụng Raw SQL Queries trong Laravel
Trong Laravel, bạn có thể sử dụng Raw SQL Queries để thực hiện các truy vấn SQL tùy chỉnh và phức tạp trực tiếp trong ứng dụng của mình. Sử dụng Raw SQL Queries có thể hữu ích khi bạn cần thực hiện các truy vấn đặc biệt hoặc phức tạp mà không thể được thực hiện thông qua các phương thức truy vấn xây dựng sẵn của Laravel.
Dưới đây là một số cách để sử dụng Raw SQL Queries trong Laravel:
- Sử dụng phương thức
DB::select()
:$users = DB::select('SELECT * FROM users WHERE active = ?', [1]);
Trong ví dụ trên, chúng ta sử dụng phương thứcDB::select()
để thực hiện một truy vấn SELECT tùy chỉnh. Các tham số truyền vào phương thức này bao gồm câu truy vấn SQL và các tham số truyền vào cho câu truy vấn (nếu có). - Sử dụng phương thức
DB::insert()
,DB::update()
vàDB::delete()
:DB::insert('INSERT INTO users (name, email) VALUES (?, ?)', ['John Doe', 'john@example.com']); DB::update('UPDATE users SET name = ? WHERE id = ?', ['Jane Doe', 1]); DB::delete('DELETE FROM users WHERE id = ?', [1]);
Chúng ta có thể sử dụng các phương thứcDB::insert()
,DB::update()
vàDB::delete()
để thực hiện các truy vấn INSERT, UPDATE và DELETE tùy chỉnh. - Sử dụng phương thức
DB::statement()
:DB::statement('ALTER TABLE users ADD COLUMN phone_number VARCHAR(20)');
Phương thứcDB::statement()
cho phép chúng ta thực thi các câu lệnh SQL tùy chỉnh mà không cần nhận kết quả trả về.
Lưu ý rằng khi sử dụng Raw SQL Queries, bạn cần đảm bảo rằng các truy vấn của bạn an toàn và tránh tình trạng SQL Injection bằng cách sử dụng các tham số truyền vào trong câu truy vấn. Laravel cung cấp các cơ chế bảo mật như binding parameters để giúp bạn thực hiện việc này một cách an toàn.