12/08/2018, 16:21

[Laravel 5.5] Eloquent: Getting Started

Giới thiệu :face_with_monocle: Eloquent ORM trong Laravel cung cấp cung cấp một cách đẹp đẽ và đơn giản các ActiveRecord cho việc làm việc với database . Mỗi database table có tương ứng một "Model", cái được sử dụng để tương tác với database. "Model" đồng ý cho việc query dữ liệu từ trong bảng ...

Giới thiệu :face_with_monocle:

Eloquent ORM trong Laravel cung cấp cung cấp một cách đẹp đẽ và đơn giản các ActiveRecord cho việc làm việc với database . Mỗi database table có tương ứng một "Model", cái được sử dụng để tương tác với database. "Model" đồng ý cho việc query dữ liệu từ trong bảng cũng như chèn thêm các dữ liệu mới vào trong bảng.

Định nghĩa các Model

  • Để bắt đầu, đầu tiên chúng ta sẽ tạo 1 Eloquent model. Thông thường "models" sẽ được tạo trong thư mục app, nhưng bạn có thể đặt chúng ở bất cứ đâu, nó được auto-loaded dựa vào file composer.json của bạn.
  • Mọi Eloquen models đều được kế thừa từ class IlluminateDatabaseEloquentModel
  • Các tạo model dễ nhất là sử dụng câu lệnh make:model của artisan command. :love_you_gesture:
php artisan make:model User
  • Nếu bạn muốn generate một database migration tương ứng khi generate model, cộng thêm tham số --migration hoặc -m:
php artisan make:model  User --migration
php artisan make:model User -m 

Eloquent Model Conventions

  • Giờ chúng ta sẽ nhìn vào ví dụ Flight model, cái chúng ta tạo ra để lưu trữ thông tin từ bảng fligths của database: :man_raising_hand:
<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class Flight extends Model
{
    //
}

Table Names

  • Chú ý rằng chúng ta không nói cho Eloquent là bảng nào sẽ được sử dụng cho Fight Model. Theo convention (tạm hiểu là theo quy ước), "snake case" số nhiều sẽ được sử dụng làm tên bảng trừ trường hợp một cái tên khác được chỉ ra một cách rõ ràng. Như vậy, ở cây này Flight model sẽ lưu dữ thông tin các record của bảng flights. Tuy nhiên, bạn có thể custom table bởi thuộc tính table trong model: :man_detective:
<?php

namespace App;

use IlluminateDatabaseEloquentModel;

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

trong ví dụ trên thì Flight model sẽ tương ứng với bảng my_flights trong database, chứ không còn tương ứng với flights

Primary Keys

  • Mặc định, primary key của mỗi table sẽ được đặt tên là id, có thể custom bằng từ khóa $$rimaryKey
  • Mặc định, primary key của mỗi table là dữ liệu kiểu integer và tự động tăng. Nếu muốn custom gía trị và kiểu của primary key, thì bạn cần set thuộc tính incrementing* (public) là **false** , như vậy, primary key sẽ có thể không phải là số, hoặc không tự động tăng. Trong trường hợp primary key không phải là một số kiểu integer, thì ta cần set thuộc tính *keyType(protected) của model thành kiểu string

Timestamps

  • Theo mặc định , Eloquent sẽ thêm created_atupdated_at vào các bảng của bạn. Nếu bạn không muốn làm điều này, hãy set $$imestamps trong model thành false :skull_crossbones:
<?php

namespace App;

use IlluminateDatabaseEloquentModel;

class Flight extends Model
{
    /**
     * Indicates if the model should be timestamped.
     *
     * @var bool
     */
    public $timestamps = false;
}
  • Nếu bạn cần tùy biến format của timestamps, hãy set $$ateFormat trong model. sẽ dụng format sẽ lưu dữ một cách rõ ràng định dạng JSON
  • Nếu bạn muốn tùy biến tên của timestamps hãy sử dụng các hằng CREATED_AT, UPDATED_AT
<?php

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

Như vậy thì trong Flight model, sẽ tồn tại 2 cột creation_datelast_update, chứ không phải mặc định là created_atupdated_date

Database Connection :man_construction_worker:             </div>
            
            <div class=

0