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';