:::
14-1 建立購物車的模型
-
接著建立 Eloquent 模型,以便將一個資料表變成一個物件來操作,並且順便產生 migration 檔案以及完整控制器
php artisan make:model Cart -mr -
再複習一下模型的第一個字請用大寫(大駝峰命名法),單複數不拘,但似乎使用單數的人居多。
- Eloquent 會假設類別的小寫、底線、複數形式就是資料表的名稱 ,例如類別叫做
Cart,其內定資料表名稱便是carts。 - 換言之,資料表名稱為英文 複數 全小寫,單字間用蛇底式命名法( snake case ),例如: first_name 、last_name、snake_case
- Model 名稱為單數,單字間用大駝峰命名法 (upper camel case) ,例如:FirstName、LastName、CamelCase
- 最後會產生
\專案\app\Cart.php模型<?php namespace App; use Illuminate\Database\Eloquent\Model; class Cart extends Model { // } -
還有
\專案\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'); } } - 這裡有個坑要注意一下,由於Laravel5.8預設會將
日期_create_users_table.php中的id自動新增流水號設為bigIncrements(),以就是以大型整數為預設類型,因此,在設定外鍵時,也必須指定相符類型的整數才行,否則會一直出現外鍵設定錯誤。如:$table->unsignedBigInteger('user_id'); - 此外,若是要建立
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 - 最後執行資料庫遷移即可建出新的carts資料表
php artisan migrate
14. 關於購物車
