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 tất cả chúng ta tương tác với dữ liệu trong database một cách dễ dàng 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. & tất cả chúng ta có thể tương tác với dữ liệu trong bảng đó như đọc, thêm, sửa & xóa (CRUD) qua Eloquent model.

2. Tạo eloquent model trong Laravel.

Mặc định, trong Laravel toàn bộ các model đều nằm trong thư mục (*8*)appModels & các model đều phải kế thừa (*8*)IlluminateDatabaseEloquentModel class.

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

(*8*)php artisan make:model ModelName

Trong số đó: (*8*)ModelName là tên của model các bạn mong muốn tạo.

VD: Tạo mới một model (*8*)Flight.

(*8*)php artisan make:model Flight

Kết quả file (*8*)Flight.php sẽ được chào đời trong thư mục (*8*)app/Models sẽ có dạng như sau:

<?php

namespace AppModels;

use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;

class Flight extends Model
{
    //
}

Nếu như bạn vừa mong muốn tạo nên một model & song song tạo thêm một migration nữa, bạn có thể thêm flag (*8*)–migration hoặc (*8*)-m.

VD: Tạo model (*8*)Flight & song song tạo thêm migration cho table (*8*)flights.

(*8*)php artisan make:model Flight --m

Tương đương bạn cũng có thể tạo model & seeder song song bằng cách dùng flag (*8*)–seed hoặc (*8*)-m.

VD: Tạo model & seed 

(*8*)php artisan make:model Flight --seed
php artisan make:model Flight -s

Tạo model & factory song song bằng cách dùng flag (*8*)–factory hoặc (*8*)-f.

Xem Thêm  Charlotte's Web Names Jade Proudman Global Brand Ambassador - jade to html

VD: Tạo model & factory 

(*8*)php artisan make:model Flight --factory
php artisan make:model Flight -f

Tạo model & controller song song bằng cách dùng flag (*8*)–controller hoặc (*8*)-c.

VD: Tạo model & controller 

(*8*)php artisan make:model Flight --controller
php artisan make:model Flight -c

Nếu như bạn mong muốn tạo model song song tạo thêm cả migration, factory, seed & controller các bạn có thể sử dụng flag (*8*)-mfsc.

VD:

(*8*)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 & trổ tài ở dạng số nhiều.

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

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

VD: Khái niệm table name của model (*8*)Flight là (*8*)my_flights.

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

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 mong muốn biến đổi cột khóa chính, bạn có thể khái niệm chúng ở trong tính chất (*8*)$primaryKey.

VD: Khái niệm khóa chính của model (*8*)Flight thành (*8*)flight_id.

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

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

Không những thế thì Laravel mặc định sẽ coi khóa chính có kiểu dữ liệu là increment & 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 các bạn không phải là increment hoặc bạn không mong muốn ép khóa chính về kiểu số, bạn có thể cài đặt thược tính (*8*)$incrementing về (*8*)false.

Xem Thêm  Hơn 25 hoạt ảnh di chuột qua nút CSS sáng tạo - [Đã cập nhật] - nút di chuột hoạt hình css

VD:

<?php

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

& nếu như khóa chính của các bạn không phải là số nguyên, bạn có cơ thể định lại kiểu dữ liệu cho nó bằng cách khái niệm trong tính chất (*8*)$keyType.

VD: Seting 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 các bạn có 2 column (*8*)created_at & (*8*)deleted_at, & 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, cập nhật dữ liệu trong bảng. Nếu bạn không mong muốn Laravel làm việc này bạn có thể cài đặt tính chất (*8*)$timestamps về (*8*)false.

VD:

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

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

Nếu bạn vẫn mong muốn Laravel auto cài đặt giá trị cho 2 cột dữ liệu để xác nhận thời gian tạo & sửa của bản ghi trong database, nhưng 2 cột dữ liệu của các bạn không phải là (*8*)created_at & (*8*)updated_at. Bạn có thể biến đổ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 tất cả 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 mong muốn xác nhận các giá trị mặc định cho attribute nào đó bạn có thể cài đặt chúng ở trong tính chất (*8*)$attributes.

Xem Thêm  Tab là gì? - tab trong html là gì

VD:

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

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

Lưu ý: attribute bước nà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 cài đặt trong áp dụng, nhưng trong trường hợp model của các bạn mong muốn sử dụng một connection khác, bạn có thể cài đặt chúng ở trong tính chất (*8*)$connection.

VD: Chuyển connection của model (*8*)Flight sang (*8*)sqltie.

<?php

namespace AppModels;

use IlluminateDatabaseEloquentModel;

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 & config căn 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.

Viết một bình luận