Bài 7 : Sử dụng Eloquent trong Laravel 5

học laravel 5

Tiếp theo bài viết trước nói về Migrations, hôm nay mình tiếp tục hướng dẫn các bạn về cách sử dụng Eloquent trong Laravel 5.  Trước khi bước vào học cách sử dụng Eloquent trong Laravel 5, thì chúng ta hãy tìm hiểu sơ lược về Eloquent cái đã.

Eloquent trong Laravel 5 là gì ?

Eloquent trong Laravel 5 chính là một ORM (Object-relational mapping), cung cấp các ActiveRecord đơn giản nhưng vô cùng chuyên nghiệp, giúp chúng ta làm việc với cơ sở dữ liệu thuận tiện hơn.

Hay nói 1 cách khác cho các bạn dễ hình dùng thì thế này. Như ở ví dụ trong bài trước, chúng ta có tạo bảng gọi là articles, dùng để chứa dữ liệu là các bài viết. Vậy thì chúng ta sẽ có thể đóan được các tương tác gì sẽ xảy ra với bảng articles này? Có phải chính là thêm, xóa, cập nhật và truy vấn đúng không nào? Và với Eloquent trong Laravel 5, nó đã xây dựng sẵn các phương thức để chúng ta làm điều đó, giúp cho việc sử dụng database trở nên dễ dàng hơn bao giờ hết.

Hướng dẫn sử dụng Eloquent trong Laravel 5

Để hiểu rõ về Eloquent, thì chúng ta hãy bắt tay vào nghiên cứu nó nào.

Trước khi sử dụng eloquent, thì chúng ta hãy nhìn lại một tí về bảng articles mà chúng ta đã tạo ở bài trước.

public function up()
	{
    		Schema::create('articles', function(Blueprint $table)
   		{
			    $table->increments('id');
    			$table->string('name'); //thêm cột name
			    $table->string('author'); // thêm cột author
    			$table->timestamps();
		   });
	}

Vào trong phpmyadmin, bạn sẽ thấy bảng articles này bao gồm các cột như sau:

laravel 5, bảng articles

Tiếp đến, mình sẽ sử dụng php artisan tạo ra một lớp model gọi là Articles sẽ kế thừa class Eloquent model, nhằm thừa hưởng sức mạnh tương tác của lớp Eloquent này với database của chúng ta, mà ở đây chính là bảng articles.

Để tạo ra class Articles kế thừa class Eloquent, mình sẽ gõ lệnh sau :

php artisan make:model Articles

và bạn sẽ nhận được thông báo tạo thành công như dưới đây:

articles eloquent

Đồng thời vào thư mục app của Laravel, bạn sẽ thấy một file model mới gọi là Articles.php có nội dung như sau:

<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Articles extends Model {

	//

}

Ở đoạn code chút xíu trên, rõ ràng là các bạn dễ dàng thấy được rằng class Articles kế thừa lớp Eloquent Model và cũng chỉ cần bao nhiêu dòng code như vậy thôi là đủ để bạn sử dụng sức mạnh ActiveRecord để thao tác thêm, xóa, sửa với bảng articles. Bạn có thể xem sơ qua lớp Model này để hiểu hơn bằng cách tìm file Model.php ở đường dẫn sau

laravel-5\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Model.php

. Mở file này lên bạn sẽ thấy các function đại loại như là find(), update(), save(),…đây chính là các phương thức đã được xây dựng sẵn giúp cho ta tương tác với database dễ dàng và hiệu quả hơn.

OK,giải thích thì dài dòng, trăm nghe không bằng thực hành (liên quan vãi :v), mình sẽ thử thao tác thêm, xóa, sửa bảng articles để các bạn hình dung nhé. Mình sẽ dùng php artisan tinker xuyên suốt quá trình demo cho các bạn, đây đơn giản chỉ là một tool của php artisan để giúp chúng ta tương tác với Laravel. (Bạn có thể xem đầy đủ các tính năng mà php artisan hỗ trợ bằng cách gõ lệnh php artisan ).

Gợi ý: Bạn đang quan tâm đến Bitcoin? Tìm hiểu ngay Bitcoin Toàn Tập Cho Người Mới nhé!

Vào vấn đề chính nào, bạn gõ dòng lệnh sau để bắt đầu sử dụng php artisan tinker

php artisan tinker

Gõ dòng lệnh trên xong, bạn sẽ thấy hiện ra như dưới đây là bạn đã vào chương trình của php artisan tinker

php artisan tinker

Tiếp đến, gõ thử tiếp vài dòng lệnh để làm quen với php artisan tinker nào. Gõ tiếp như dưới đây

>>> $name = 'Hieu'

bạn sẽ thông báo trả về là ‘Hieu’, điều này có nghĩa là biến $name đã lưu giá trị ‘Hieu’. Không tin các bạn thử gõ tiếp lệnh này để xem giá trị của biến $name.

>>> $name

Bạn sẽ thấy kết quả trả về là ‘Hieu’.

Trên đây chỉ là demo cho các bạn nắm được cách tương tác của php artisan tinker đối với ứng dụng Laravel của chúng ta.

Giờ thì chúng ta thử tương tác với class Articles mà chúng ta vừa tạo nào. Gõ tiếp lệnh dưới đây để khởi tạo đối tượng $articles.

$articles = new App\Articles

Bạn sẽ thấy trong cmd hiện ra thông tin đối tượng $articles như sau:

php-artisan-tinker-articles

Có thể bạn quan tâm: Tặng coupon 40% giá trị khóa học tạo website với Laravel 5

1. Thêm 1 record mới vào database

Như chúng ta đã biết thì bảng articles trong database bao gồm các fields như là name, author, created_at,…Giờ mình sẽ thử thêm 1 record mới vào bảng này, các bạn gõ từng lệnh sau:

>>> $articles->name = "blablabla"
>>> $articles->author = "Hieu"

Giờ thì gõ dòng lệnh dưới đây

>>> $articles->toArray();

để đưa đối tượng $articles ra dạng mảng, và bạn sẽ thấy được thông tin một cách rõ ràng

[
   "author" => "Hieu"
   "name"   => "blablabla"
]

Tiếp đến, gõ như sau để sử dụng phương thức save() của class Model mà mình nhắc đến ở trên để thêm 1 record mới vào db.

>>> $articles->save();

nếu thấy trả về true là bạn đã thêm record mới thành công. Để kiểm chứng, các bạn vào database (phpmyadmin), xem bảng articles sẽ thấy có 1 record mới được thêm vào.

2. Truy vấn dữ liệu trong database

Để truy vấn dữ liệu trong DB thì bạn gõ

>>> $articles = App\Articles::find(1)

để sử dụng phương thức find($param) với tham số $param truyền vào là id của record (ở đây là số 1).

Giờ thì gõ tiếp

>>> $aritcles->toArray();

bạn sẽ thấy chúng ta đã lấy được record vừa thêm vào thông qua id là 1

3. Cập nhật thông tin record vừa tạo

Ở bước 2, sau khi đã lấy được thông tin của record vừa tạo, bạn gõ tiếp lệnh sau để thay đổi giá trị trong cột author

>>> $articles->author = 'Nam'

Cập nhật xuống db

>>> $articles->update();

Vào bảng articles trong db bạn sẽ thấy thông tin author từ ‘Hieu’ đã được chuyển thành ‘Nam’

4.Xóa record trong db

Ở bước 2 khi mà chúng ta đã lấy được record hiện hành, giờ mình muốn xóa đi record này thì đơn giản chạy function delete() như sau:

>>> $articles->delete();

Vào trong db, record vừa thêm vào bảng articles đã bị xóa đi.

Tổng kết : Bài viết này mình không liệt kê hết đầy đủ những tính năng của Eloquent, vì mục đích của bài viết này là mình muốn giới thiệu cho các bạn hiểu được Eloquent trong Laravel 5 là gì ? Và nó hoạt động ra sao ? Cách nó tương tác thêm, xóa, sửa với database như thế nào. Bạn có thể tìm hiểu nhiều hơn về Eloquent trong Laravel 5 tại trang chủ của Laravel http://laravel.com/docs/5.0/eloquent . Trong bài tiếp theo mình sẽ hướng dẫn các bạn mô hình MVC (Model, Controller, View)  trong Laravel 5 và cách dữ liệu được truyền đi trong mô hình MVC đó như thế nào. Chúc các bạn học tốt.

Xem thêm : Khóa học tạo website hoàn chỉnh với Laravel 5 tặng mã giảm giá 40% + Hỗ trợ việc làm sau khi học xong

Nguồn : kungfuphp.com

Subscribe
Notify of
guest

33 Bình Luận
Newest
Oldest Most Voted
Inline Feedbacks
Xem Tất Cả Bình Luận
Tam
8 năm trước

Mình có 1 custom model như sau:

namespace App\Models;
use Illuminate\Database\Eloquent\Model;
// use Illuminate\Support\Facades\DB;
class Test extends Model
{
private $_prefix = ‘_prefix’;

public function __construct(array $attributes = array())
{
// parent::__construct($attributes);
$this->_prefix = ‘abc_’;
}

public static function custom_table(){
return $this->_prefix.’table_name’;
}

}

Controller gọi
Test::custom_table() // error Using $this when not in object context

Có bác nào biết cách fix lỗi ?
Thanks & Regards

Vuong
Vuong
9 năm trước

Add giúp mình cái này. Mình có bảng tochuctindung: matctd, tentctd, diachitctd. Minh Delete thi nó báo unknown tochuctindung.id.
Lỗi nằm ở đâu vậy add? cách khắc phục add giúp mjh. minh mới tìm hiểu laravel. Cảm on add

dương
dương
9 năm trước

a ơi e gõ tới bước $articles= new App\Articles rồi thì nó trả về =>App\Articles{#663} thì là lỗi gì vậy a?

thanh
thanh
9 năm trước

mình dùng migration thì thấy có tác động tới DB nhưng sao xài cái này hoặc use DB; lại ko đc ?

PDOException in Connector.php line 55:
SQLSTATE[HY000] [1045] Access denied for user ‘root’@’localhost’ (using password: YES)
in Connector.php line 55
at PDO->__construct(‘mysql:host=127.0.0.1;port=3306;dbname=dich_vu_an_uong’, ‘root’, ‘11111’, array(‘0’, ‘2’, ‘0’, false, false)) in Connector.php line 55
p/s : trên mạng thấy toàn chỉ cách sửa password của ‘root’ trong khi ở đây mình nhập đúng hết mà, dùng migration nó cũng tạo table trong DB bình thường mà ?

Linh dang thanh
10 năm trước

em bị làm theo hương dẫn nhưng khi gõ lệnh save() thì thông báo lỗi và chưa biết khắc phục thế nào
Illuminate\Database\QueryException with message ‘SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘author’ in ‘field list’ (SQL: insert into `ar
ticles` (`name`, `author`, `updated_at`, `created_at`) values (Hieu, Bla bla Bla, 2016-03-04 14:32:26, 2016-03-04 14:32:26))’

Nguyễn Thanh Toàn
Nguyễn Thanh Toàn
10 năm trước

Ad cho em hỏi tý được không ạ? Em dùng hàm Auth::attempt($user) để kiểm tra đăng nhập. Em tin chắc rằng e đã nhập đúng Username và Password nhưng hàm attempt luôn trả về sai. Ad đã từng gặp trường hợp này chưa ạ? Giúp e với, chúc page thành công!

ignoredbyfrost
10 năm trước

cho mình hỏi về relation một chút:
mình có 1 bảng ngôn ngữ: languages(id, name, …), 1 bảng bài viết posts(id, image, status …) và bảng relation giữa chúng là post_lang(post_id, lang_id, post_title, post_slug, content….)
bây giờ mình muốn lấy tất cả bài viết query từ bảng posts: Post::with(‘langs’)….. và sắp xếp theo post_title trong bảng post_lang (bảng pivot) thì viết ntn a. thank all

chauanthuan
chauanthuan
10 năm trước

Anh nên thêm làm thế nào để exit tinker console luôn ạ, để mọi người trong quá trình thao tác theo có thể xuyên suốt các bài với nhau ạ. Chúc anh luôn mạnh khỏe để viết thêm nhiu bài viết thật hay nữa ạ.

tripplexno1
10 năm trước

cho hỏi làm cách này có lợi gì hơn, t thấy vào csdl làm mấy việc này nhanh gọn hơn

Hanzzy
Hanzzy
10 năm trước

Các bác cho em hỏi chút tại sao em dùng cái findOrFail thì nó báo là Method not found in model

33
0
Bạn có ý kiến về bài viết, hãy để lại bình luận nhé!x
()
x