Toidicode.com

Toidicode.com

BASIC TO ADVANCE

Bài 29: Eloquent Model trong Laravel 8

Tiếp tục với series, phần này mình sẽ giời thiệu với mọi người về eloquent model trong Laravel 8.

1. Eloquent model là gì?

Eloquent model là một module trong Laravel core. Nó là một object-relational mapper (ORM) nó giúp cho chúng ta tương tác với dữ liệu trong database một cách đơn giản linh hỏạt hơn.

Khi sử dụng Eloquent thì mỗi một table trong database sẽ được gán với một model. Và chúng ta có thể tương tác với dữ liệu trong bảng đó như đọc, thêm, sửa và xóa (CRUD) qua Eloquent model.

2. Tạo eloquent model trong Laravel.

Mặc định, trong Laravel tất cả các model đều nằm trong thư mục app\Models và các model đều phải kế thừa Illuminate\Database\Eloquent\Model class.

Để tạo ra model trong Laravel các bạn có thể sử dụng command:

php artisan make:model ModelName

Trong đó: ModelName là tên của model các bạn muốn tạo.

VD: Tạo mới một model Flight.

php artisan make:model Flight

Kết quả file Flight.php sẽ được sinh ra trong thư mục app/Models sẽ có dạng như sau:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    //
}

Nếu như bạn vừa muốn tạo ra một model và đồng thời tạo thêm một migration nữa, bạn có thể thêm flag --migration hoặc -m.

VD: Tạo model Flight và đồng thời tạo thêm migration cho table flights.

php artisan make:model Flight --m

Tương tự bạn cũng có thể tạo model và seeder đồng thời bằng cách sử dụng flag --seed hoặc -m.

VD: Tạo model và seed 

php artisan make:model Flight --seed
php artisan make:model Flight -s

Tạo model và factory đồng thời bằng cách sử dụng flag --factory hoặc -f.

VD: Tạo model và factory 

php artisan make:model Flight --factory
php artisan make:model Flight -f

Tạo model và controller đồng thời bằng cách sử dụng flag --controller hoặc -c.

VD: Tạo model và controller 

php artisan make:model Flight --controller
php artisan make:model Flight -c

Nếu như bạn muốn tạo model đồng thời tạo thêm cả migration, factory, seed và controller các bạn có thể sử dụng flag -mfsc.

VD:

php artisan make:model Flight -mfsc

3. Cấu hình eloquent model.

Tên bảng

Mặc định thì model sẽ sử dụng tên bảng là tên của của model nhưng được viết dưới dạng snake_case và thể hiện ở dạng số nhiều.

VD: Đối với model Flight vừa tạo ở trên thì table name sẽ là flights, hoặc model name là AirTrafficController thì table name sẽ là air_traffic_controllers.

Nếu table name trong model của bạn không sử dụng quy ước kia thì bạn có thể xác định table name thủ công bằng cách gán chúng vào trong thuộc tính $table.

VD: Định nghĩa table name của model Flightmy_flights.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * The table associated with the model.
     *
     * @var string
     */
    protected $table = 'my_flights';
}

Primary key

Mặc định Laravel nhận định column id sẽ là khóa chính trong model, nếu bạn muốn thay đổi cột khóa chính, bạn có thể định nghĩa chúng ở trong thuộc tính $primaryKey.

VD: Định nghĩa khóa chính của model Flight thành flight_id.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * The primary key associated with the table.
     *
     * @var string
     */
    protected $primaryKey = 'flight_id';
}

Ngoài ra thì Laravel mặc định sẽ coi khóa chính có kiểu dữ liệu là increment và khi sử dụng khóa chính Laravel sẽ tự convert khóa chính thành kiểu số. Nếu như khóa chính của bạn không phải là increment hoặc bạn không muốn ép khóa chính về kiểu số, bạn có thể thiết lập thược tính $incrementing về false.

VD:

<?php

class Flight extends Model
{
    /**
     * Indicates if the model's ID is auto-incrementing.
     *
     * @var bool
     */
    public $incrementing = false;
}

Và nếu như khóa chính của bạn không phải là số nguyên, bạn có thể xác định lại kiểu dữ liệu cho nó bằng cách định nghĩa trong thuộc tính $keyType.

VD: Thiết lập khóa chính có kiểu dữ liệu là string.

<?php

class Flight extends Model
{
    /**
     * The data type of the auto-incrementing ID.
     *
     * @var string
     */
    protected $keyType = 'string';
}

Timestamp

Mặc định, Laravel sẽ coi như trong table của bạn có 2 column created_atdeleted_at, và sẽ mặc định set giá trị cho 2 cột dữ liệu này cho các trường hợp tạo mới, update dữ liệu trong bảng. Nếu bạn không muốn Laravel làm việc này bạn có thể thiết lập thuộc tính $timestamps về false.

VD:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * Indicates if the model should be timestamped.
     *
     * @var bool
     */
    public $timestamps = false;
}

Nếu bạn vẫn muốn Laravel tự động thiết lập giá trị cho 2 cột dữ liệu để xác định thời gian tạo và sửa của bản ghi trong database, nhưng 2 cột dữ liệu của bạn không phải là created_atupdated_at. Bạn có thể thay đổi nó.

VD:

<?php

class Flight extends Model
{
    const CREATED_AT = 'creation_date';
    const UPDATED_AT = 'updated_date';
}

Giá trị mặc định

Mặc định khi chúng ta instance một model class thì nó sẽ không chứa giá trị của một attribute nào, nếu như bạn muốn xác định các giá trị mặc định cho attribute nào đó bạn có thể thiết lập chúng ở trong thuộc tính $attributes.

VD:

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * The model's default values for attributes.
     *
     * @var array
     */
    protected $attributes = [
        'delayed' => false,
    ];
}

Chú ý: attribute ở đây chính là column trong table trong database.

Database connection

Mặc định Eloquent model trong Laravel sẽ sử dụng connection default được thiết lập trong ứng dụng, nhưng trong trường hợp model của bạn muốn sử dụng một connection khác, bạn có thể thiết lập chúng ở trong thuộc tính $connection.

VD: Chuyển connection của model Flight sang sqltie.

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Flight extends Model
{
    /**
     * The database connection that should be used by the model.
     *
     * @var string
     */
    protected $connection = 'sqlite';
}

4. Lời kết.

Phần này mình mới chỉ giới thiệu với mọi người cách tạo và config cơ bản liên quan đến Eloquent model trong Laravel thôi, phần sau mình sẽ giới thiệu với mọi người về query dữ liệu trên Eloquent model.

Đăng ký nhận tin.

Chúng tôi chỉ gửi tối đa 2 lần trên 1 tháng. Tuyên bố không spam mail!

Vũ Thanh Tài

About author
The best way to learn is to share
Xem tất cả bài đăng

0 Comments

Bài viết chưa có ai bình luận, hãy là người đầu tiên đi bạn!

Bình luận

Captcha