Laravel 的 Eloquent model 提供查詢資料表以及新增資料到資料表的功能

這部分主要說明定義 Models 及 Migration

定義 Models

現有資料表已經存在的情況下

透過下方指令就能實體化一個 Models,再經過簡單設定就能與該資料表連結

php artisan make:model Models名稱

如果資料庫尚未存在資料表,就可以在實體化 Models 同時實體化一個 Migration

php artisan make:model Models名稱 -m

//or

php artisan make:model Models名稱 -migration

範例

例如,生成一個會員Model 同時實體化 Migration (特別將新增的model統一存放在models資料夾,位於 app/Models/) 若建立過程發生錯誤,則需要手動建立一個開頭大寫的 Models 資料夾

php artisan make:model Models/members -m

Model created successfully.
Created Migration: 2018_07_14_130201_create_members_table

接下來先將會員的 migration 的 schema 設計好

<?php
...
    public function up()
    {
        Schema::create('members', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name', 100)->nullable();
            $table->string('email', 100)->unique();
            $table->tinyInteger('sexual');
            $table->timestamps();
        });
    }

執行更新 migration ,這時可以查看資料表是否建立 並且同時會建立 created_at, updated_at 這兩個欄位

php artisan migrate

在前面所建立的 app/Models/members.php 檔案內容如下

通常,Eloquent 會自動將 class 名稱作為 Model 對應的資料表名稱,因此不必再特別修改

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class members extends Model
{
    //
}

Models 預設

預設存在底下這些欄位: 時間標記欄位 - created_at, updated_at 主鍵欄位 - id (primary key with auto_increatment as number)

進階修改

如果資料庫所命名的資料表名稱和 model不同,則可以使用 $table 變數來設定

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class members extends Model
{
    protected $table = '資料表名稱';
}

修改 timestamps

如果資料表不是透過 migration 生成,缺少 created_at, updated_at 這兩個欄位時

可以透過 $timestamps 設定為 false 來忽略

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class members extends Model
{
    protected $table = '資料表名稱';
    
    /**
     * timestamps
     *
     * 資料表不存在 created_at and updated_at 欄位,設定忽略時間標記欄位
     */
    public $timestamps = false;
}

如果儲存時間搓計欄位是其他名稱,則可以透過下面兩個變數來調整

    const CREATED_AT = 'creation_date';
    const UPDATED_AT = 'last_update';

修改 primary key

如果 primary key 欄位不是 id

可以透過 $primaryKey 來設定修改

protected $primaryKey = 'another_name';

如果 primary key 不需要自動增值,可以使用 $incrementing 為 false

public $incrementing = false;

如果 primary key 型別為字串,則可以透過 $keyType 設定為 ‘string’

protected $keyType = 'string';

資料庫連線

Eloquent 會採用預設資料庫連線設定

如果要使用其他連線設定,則可以透過下面這個變數設定

protected $connection = 'connection-name';