:::

14-1 建立購物車的模型

  1. 接著建立 Eloquent 模型,以便將一個資料表變成一個物件來操作,並且順便產生 migration 檔案以及完整控制器

    php artisan make:model Cart -mr
  2. 再複習一下模型的第一個字請用大寫(大駝峰命名法),單複數不拘,但似乎使用單數的人居多。

  3. Eloquent 會假設類別的小寫、底線、複數形式就是資料表的名稱 ,例如類別叫做Cart,其內定資料表名稱便是carts
  4. 換言之,資料表名稱為英文 複數 全小寫,單字間用蛇底式命名法( snake case ),例如: first_name 、last_name、snake_case
  5. Model 名稱為單數,單字間用大駝峰命名法 (upper camel case) ,例如:FirstName、LastName、CamelCase
  6. 最後會產生 \專案\app\Cart.php 模型
    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Cart extends Model
    {
        //
    }
    
  7. 還有\專案\database\migrations\日期_create_carts_table.php(如:database\migrations\2019_05_28_212954_create_carts_table.php),我們順道編輯一下其內容:

    <?php
    
    use Illuminate\Database\Migrations\Migration;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Support\Facades\Schema;
    
    class CreateCartsTable extends Migration
    {
        /**
         * Run the migrations.
         *
         * @return void
         */
        public function up()
        {
            Schema::create('carts', function (Blueprint $table) {
                $table->increments('id');
                $table->unsignedBigInteger('user_id');
                $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
                $table->unsignedInteger('product_id');
                $table->foreign('product_id')->references('id')->on('products')->onDelete('cascade');
                $table->unsignedInteger('amount');
                $table->timestamps();
            });
        }
    
        /**
         * Reverse the migrations.
         *
         * @return void
         */
        public function down()
        {
            Schema::dropIfExists('carts');
        }
    }
    
  8. 這裡有個坑要注意一下,由於Laravel5.8預設會將日期_create_users_table.php中的id自動新增流水號設為bigIncrements(),以就是以大型整數為預設類型,因此,在設定外鍵時,也必須指定相符類型的整數才行,否則會一直出現外鍵設定錯誤。如:
    $table->unsignedBigInteger('user_id');
  9. 此外,若是要建立 foreign key 必須在還沒有資料的時候就先建立,日後若已經有資料,要再建立 foreign key 就會比較麻煩。(因為必須資料能對應的起來才可以建立)
    $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');

    foreign('user_id')用來指定哪個欄位是外鍵,然後用references('id')->on('users')來設定管連到哪個資料表的哪個欄位,後的onDelete('cascade') 是一個約束條件,也就是當該用戶被刪除時,連同購物車的項目也一併刪除之意。 詳情:https://learnku.com/docs/laravel/5.8/migrations/3928#foreign-key-constraints

  10. 最後執行資料庫遷移即可建出新的carts資料表
    php artisan migrate

 

到GitHub觀看此單元程式異動


:::

書籍目錄

展開 | 闔起

快速登入


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

計數器

今天: 5190519051905190
昨天: 2489248924892489
總計: 8027172802717280271728027172802717280271728027172