:::

9. 建立商品模型

一、商品的資料架構

  1. 我們從 專案需求分析 大致就可以知道我們需要替商品做一個完整的機制
  2. 在此簡單規劃商品的資料結構如下, products 表:
    字段名稱 描述 類型 索引
    id 自增長ID unsigned int 主鍵
    title 商品名稱 varchar
    description 商品詳情 text
    image 商品封面圖片檔案路徑 varchar
    on_sale 商品是否正在售賣 tiny int, default 1
    price 價格 unsigned int

二、建立 Eloquent 模型

  1. 一個Eloquent 模型對應一張表,model (模型)就是用來操作資料庫資料用的。

  2. migration 可視為建立SQL資料表的方法(有點類似xxx.sql的作用),可分次建立,亦可回覆上一動。

  3. 先建立 Eloquent 模型,以便將一個資料表變成一個物件來操作,並且順便產生 migration 檔案
    php artisan make:model Product --migration
  4. 亦可寫成

    php artisan make:model Product -mr

    其他參數還有:

    • -m 表示創建模型對應的遷移文件

    • -c 表示創建模型對應的控制器

    • -r 表示創建模型對應的控制器,並加入完整的資源控制(七個函數)

    • -f 表示創建模型對應的工廠文件

  5. 模型的第一個字請用大寫(大駝峰命名法),單複數不拘,但似乎使用單數的人居多。

  6. 若 migration 檔案已經存在了,則用下面任一語法均可

    php artisan make:model Product
    php artisan make:model Product --no-migration
    
  7. 最後會產生 \專案\app\Product.php 模型
    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Product extends Model
    {
        //
    }
    
  8. 還有\專案\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 模型

  1. 如果是自動建立的 migration,其實下面動作不需要做
  2. Eloquent 會假設類別的小寫、底線、複數形式就是資料表的名稱 ,例如類別叫做Product,其內定資料表名稱便是products,所以資料表名稱若不符合此內規,則可自行定義一個 $table 屬性來告知正確的資料表名稱。
  3. 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 慣例

  1. model 預設在 \專案\app 底下,若要放在\專案\app下的子目錄,例如:\專案\app\model,記得也要修改 namespace
  2. 一個 Model 對應一個資料表
  3. 資料表名稱為英文 複數 全小寫,單字間用蛇底式命名法( snake case ),例如: first_name 、last_name、snake_case
  4. Model 名稱為單數,單字間用大駝峰命名法 (upper camel case) ,例如:FirstName、LastName、CamelCase

五、關於Eloquent 用法

  1. 方法詳見:https://learnku.com/docs/laravel/5.8/eloquent/1403

到GitHub觀看此單元程式異動

 


:::

書籍目錄

展開 | 闔起

快速登入


http%3A%2F%2Fcampus-xoops.tn.edu.tw%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbdsn%3D1408%26tbsn%3D43

計數器

今天: 818818818
昨天: 2507250725072507
總計: 8007247800724780072478007247800724780072478007247