ELOQUENT ORM IN LARAVEL, EXAMPLE
Ở bài trước chúng ta đã tìm hiểu về BLADE TEMPLATING , MIGRATIONS AND SEEDING IN LARAVEL Ở bài này chúng ta sẽ tìm hiều về Eloquent ORM, đây là một trong những thế mạnh của Laravel Framwork mà 1 vài Framwork khác không hỗ trợ được. I. Lý thuyết Link tham khảo : http://laravel.com/docs/4.2 ...
Ở bài trước chúng ta đã tìm hiểu về BLADE TEMPLATING , MIGRATIONS AND SEEDING IN LARAVEL
Ở bài này chúng ta sẽ tìm hiều về Eloquent ORM, đây là một trong những thế mạnh của Laravel Framwork mà 1 vài Framwork khác không hỗ trợ được.
I. Lý thuyết
Link tham khảo : http://laravel.com/docs/4.2/eloquent
Tạo model User.php trong thư mục app/models/User.php
class User extends Eloquent { protected $table = 'my_users'; }
- Khi model được định nghĩa là chúng ta có thể thao tác trên nó,và lớp model đều phải kế thừa từ lớp Eloquent
- Thuộc tính $$able sẽ khai báo bảng dữ liệu mà ta sẽ thao tác
- Lưu ý rằng cột updated_at và created_at nên được tạo tự động, nếu bạn không muốn nó tạo tự động ngày giờ thì bạn có thề đưa thuộc tính $$imestamps về false .
1. Get dữ liệu
Truy vấn tất cả record
$users=User::all();
Truy vấn 1 record bởi khóa chính
$user = User::find(1); var_dump($user->name);
Đề đăng ký xử lý lỗi thì ta phải kích hoạt ModelNotFoundException
use IlluminateDatabaseEloquentModelNotFoundException; App::error(function(ModelNotFoundException $e) { return Response::make('Not Found', 404); });
Truy vấn sử dụng Eloquent Models
$users = User::where('votes', '>', 100)->take(10)->get(); foreach ($users as $user) { var_dump($user->name); }
Tất nhiên bạn cũng có thể sử dụng hàm trong query builder
$count = User::where('votes', '>', 100)->count();
- Phương thức count() sẽ trả về tống số dòng tìm thấy phù hợp với câu điều kiên (id > 100
2. Insert
Đề tạo một record mới trong bảng CSDL, đơn giản bạn tạo một thực thể của model và gọi phương thức save
$user = new User(); $user->name = 'John'; $user->save()
Sử dụng phương thức Create
// Create a new user in the database... $user = User::create(array('name' => 'John')); // Retrieve the user by the attributes, or create it if it doesn't exist... $user = User::firstOrCreate(array('name' => 'John')); // Retrieve the user by the attributes, or instantiate a new instance... $user = User::firstOrNew(array('name' => 'John'));
3. Update
Đề cập nhật một Model, bạn có thể truy vấn nó, thay đổi thuộc tính và lưu nó lại
$user = User::find(1); $user->email = 'huytuan@framgia.com'; $user->save(); //update user id = 1, email = huytuan@framgia.com
Đôi khi bạn muốn lưu không chỉ nó, mà toàn bọ những gì liên quan tới nó thì bạn sử dụng phương thức push
$user->push();
Bạn có thể chạy câu lệnh update để truy vấn model theo điều kiện
$affectedRows = User::where('id', '>', 100)->update(array('status' => 2));
4. Delete
Để xóa một record, đơn giản bạn gọi phương thức delete dựa vào khóa chính của dữ liệu :
$user = User::find(1); $user->delete();
Xóa bằng khóa
User::destroy(1); User::destroy(array(1, 2, 3)); User::destroy(1, 2, 3);
Ta cũng có thể xóa theo kiểu query
$affectedRows = User::where('id', '>', 100)->delete();
II . EXAMPLE
Đầu tiên ta sẽ cấu hình file database.php để connect csdl.
Tiếp theo Creating Migrations. Cách tạo bạn có thể xem lại bài trước BLADE TEMPLATING , MIGRATIONS AND SEEDING IN LARAVEL
B1. Để tạo 1 migration chúng ta sử dụng câu lệnh migrate:make trong command line
php artisan migrate:make create_users_table
created Migration: 2014_11_25_170759_create_users_table là: của tên file là thời gian hiện tại tạo ra file. ta vào folder app/database/migrations/ sẽ thấy file 2014_11_25_170759_create_users_table.php được tạo ra.
B2: mở file 2014_11_25_170759_create_users_table.php thêm vào phương thức Up() như sau:
<?php use IlluminateDatabaseSchemaBlueprint; use IlluminateDatabaseMigrationsMigration; class CreateUsersTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::table('users', function(Blueprint $table) { $table->create(); // creates the table. $table->increments('id'); $table->string('username',50); $table->string('email',100); }); } /** * Reverse the migrations. * * @return void */ public function down() { // } }
**B3 **: sau khi đã thêm xong, để thay đổi có hiệu lực, ta chạy lại câu lệnh
php artisan migrate
B4. Vào database xem kết quả, table users được tạo
B5. Truy cập vào thư mục app/model tạo Model User.php với nội dung như sau
<?php class User extends Eloquent{ public $table = "users"; // tham chiếu table users }
Để sử dụng được Eloquent ORM ta cần chú ý tới những vấn đề sau:
- Tất cả các file phải được viết trong thư mục app/models
- Các file model phải được kế thừa từ lớp Eloquent
B6. Vd : INSERT
Mở app/route.php. viết chức năng insert data vào table user
Route::get('/insert_users',function(){ for ($i=0; $i < 20 ; $i++) { $user = new User(); $user ->username = "Huy Tuan ".$i; $user ->email = "vu.huy.tuan".$i."@gmail.com"; $user ->password = rand(10,20); $user ->save(); } });
Run: http://localhost/laravelmaster/public/insert_users
truy cập database: ta sẽ thấy kết quả được thêm vào database.
B7. VD: tạo trang user , show danh sách tất cả user.
- tạo route
Route::get('users', 'UserController@showUser'); //call UserController, action showUser
**+ Tạo Controller: ** app/controller/UserController.php
<?php class UserController extends BaseController{ public function showUser() { $users = User::get(); // get data from table users return View::make('user', array('users' => $users ) ); //render page user.blade.php } }
+ Tạo View: app/view/user.blade.php
@extends('layouts.default') @section('content') <div class="jumbotron"> <div class="container"> <h1>Hello, world!</h1> </div> </div> <div class="container"> <div class="col-md-12 col-lg-12"> <table class="table table-hover"> <thead> <tr> <td>ID</td> <td>User Name</td> <td>Email</td> <td>Created</td> </tr> </thead> <tbody> @foreach($users as $key => $user) <tr> <td>{{$user['id']}}</td> <td>{{$user['username']}}</td> <td>{{$user['email']}}</td> <td>{{$user['created_at']}}</td> </tr> @endforeach </tbody> </table> </div> </div> @stop
Run localhost/laravelmaster/public/users và xem kết quả
Get User By ID
Route::get('getUserById',function(){ $user = User::find(5); //get user có ID = 5 echo $user->username; echo " <br> Email: ".$user->email; }); //result: Huy Tuan 5, vu.huy.tuan5@gmal.com
Delete User By ID
Route::get('deleteUser',function(){ User::where("id","=","10")->delete(); });
Update user
Route::get('updateUser',function(){ $user = User::find(1); $user ->username = "Framgia"; $user ->save(); });
Source Code
https://www.dropbox.com/s/91b9myheyhw2e0v/laravelmaster.rar?dl=0