:::
9. 建立商品模型
一、商品的資料架構
- 我們從 專案需求分析 大致就可以知道我們需要替商品做一個完整的機制
- 在此簡單規劃商品的資料結構如下,
products表:字段名稱 描述 類型 索引 id 自增長ID unsigned int 主鍵 title 商品名稱 varchar 無 description 商品詳情 text 無 image 商品封面圖片檔案路徑 varchar 無 on_sale 商品是否正在售賣 tiny int, default 1 無 price 價格 unsigned int 無
二、建立 Eloquent 模型
-
一個Eloquent 模型對應一張表,
model(模型)就是用來操作資料庫資料用的。 -
migration 可視為建立SQL資料表的方法(有點類似xxx.sql的作用),可分次建立,亦可回覆上一動。
- 先建立 Eloquent 模型,以便將一個資料表變成一個物件來操作,並且順便產生 migration 檔案
php artisan make:model Product --migration -
亦可寫成
php artisan make:model Product -mr其他參數還有:
-
-m表示創建模型對應的遷移文件 -
-c表示創建模型對應的控制器 -
-r表示創建模型對應的控制器,並加入完整的資源控制(七個函數) -
-f表示創建模型對應的工廠文件
-
-
模型的第一個字請用大寫(大駝峰命名法),單複數不拘,但似乎使用單數的人居多。
-
若 migration 檔案已經存在了,則用下面任一語法均可
php artisan make:model Product php artisan make:model Product --no-migration - 最後會產生
\專案\app\Product.php模型<?php namespace App; use Illuminate\Database\Eloquent\Model; class Product extends Model { // } -
還有
\專案\database\migrations\日期_create_products_table.php(如:2019_05_23_154407_create_products_table.php)<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateProductsTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('products', function (Blueprint $table) { $table->bigIncrements('id'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('products'); } }
三、編輯 Eloquent 模型
- 如果是自動建立的 migration,其實下面動作不需要做。
- Eloquent 會假設類別的小寫、底線、複數形式就是資料表的名稱 ,例如類別叫做
Product,其內定資料表名稱便是products,所以資料表名稱若不符合此內規,則可自行定義一個$table屬性來告知正確的資料表名稱。 - Eloquent 也會假設每個資料表有一個主鍵欄位叫做 id。所以,若您的主鍵不是叫做id,那麼你也可以定義一個
$primaryKey屬性來覆寫這個慣例。(\專案\app\Product.php)<?php namespace App; use Illuminate\Database\Eloquent\Model; class Product extends Model { //若符合慣例可以不用設定這些 protected $table = 'products'; protected $primaryKey = 'id'; }
四、Model 慣例
- model 預設在
\專案\app底下,若要放在\專案\app下的子目錄,例如:\專案\app\model,記得也要修改 namespace - 一個 Model 對應一個資料表
- 資料表名稱為英文 複數 全小寫,單字間用蛇底式命名法( snake case ),例如: first_name 、last_name、snake_case
- Model 名稱為單數,單字間用大駝峰命名法 (upper camel case) ,例如:FirstName、LastName、CamelCase
五、關於Eloquent 用法
8-4 調整可修改的項目
