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/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 $table 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 $timestamps 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 Illuminate\Database\Eloquent\ModelNotFoundException;
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 = '[email protected]';
$user->save();
//update user id = 1, email = [email protected]

Đô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.

Screenshot_2 .png

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

Screenshot_3 (1).png

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 Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

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

Screenshot_11.png

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.

Screenshot_4.png

B7. VD: tạo trang user , show danh sách tất cả user.

  • tạo route
Route::get('users', '[email protected]'); //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ả

Screenshot_5.png

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, [email protected]

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