laravel5.1にECカート操作が出来るようになったので、商品を選んで、カートに入れて、カートクリアまでやってみた。
1, 商品テーブルを作る
php artisan make:migration create_products_table –create=products
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15  | 
						    public function up()     {         Schema::create('products', function (Blueprint $table) {             $table->increments('id')->comment('主キー');             $table->string('product_code')->unique()->comment('商品コード	各商品に割り当てる商品コード。重複なし');             $table->string('product_name')->comment('価格	販売価格。');             $table->integer('product_price')->comment('価格	販売価格。');             $table->text('product_detail')->comment('商品詳細	その他の情報');             $table->text('product_remarks')->comment('備考	管理用備考');             $table->softDeletes();               $table->timestamps();         });     }  | 
					
2, 商品モデルも作る(laravel側からデータベースを操作するためのORマッパー)
php artisan make:model Product
app\Product.phpが生成される(コーディングは何もしなくても良い。親クラスの継承メソッドでアクセスできるようになる)
3, 商品レコード内容の定義ファイルを生成
既存のDatabaseSeeder.phpを編集
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42  | 
						<?php use Illuminate\Database\Seeder; use Illuminate\Database\Eloquent\Model; use App\Product; // 商品テーブル // 全体のレコード生成 class DatabaseSeeder extends Seeder {     public function run()     {         Model::unguard();         // $this->call(UserTableSeeder::class);         $this->call(ProductsTableSeeder::class);         Model::reguard();     } } // 商品テーブルを生成 class ProductsTableSeeder extends Seeder {     public function run()     {         // 既存の商品レコードは全削除         DB::table('products')->delete();         // 商品を10個追加         for ($i = 0; $i < 10; $i++) {               Product::create([                 'product_code' => 100+$i,                 'product_name' => 'Product'. $i,                 'product_price' => 100 * $i,                 'product_detail' => 'detail'. $i,                 'product_remarks' => 'remarks'. $i             ]);         }     } }  | 
					
4, MySQLに反映させる。
php artisan migrate:refresh –seed
5, ブラウザに表示してみる
app/Http/route.phpファイルに追加
| 
					 1 2 3 4 5 6 7 8 9 10  | 
						// 商品一覧 Route::get('/product', function () {     //全商品を取得         $products = App\Product::all();     // ブラウザ上に表示     return $products; });  | 
					
http://localhost/cart/public/product
[{“id”:1,”product_code”:”0″,”product_name”:”Product0″,”product_price”:0,”product_detail”:”detail0″,”product_remarks”:”remarks0″,”created_at”:”2016-10-25 01:45:11″,”updated_at”:”2016-10-25 01:45:11″},
{“id”:2,”product_code”:”1″,”product_name”:”Product1″,”product_price”:100,”product_detail”:”detail1″,”product_remarks”:”remarks1″,”created_at”:”2016-10-25 01:45:11″,”updated_at”:”2016-10-25 01:45:11″},
{“id”:3,”product_code”:”2″,”product_name”:”Product2″,”product_price”:200,”product_detail”:”detail2″,”product_remarks”:”remarks2″,”created_at”:”2016-10-25 01:45:11″,”updated_at”:”2016-10-25 01:45:11″},
{“id”:4,”product_code”:”3″,”product_name”:”Product3″,”product_price”:300,”product_detail”:”detail3″,”product_remarks”:”remarks3″,”created_at”:”2016-10-25 01:45:11″,”updated_at”:”2016-10-25 01:45:11″},
{“id”:5,”product_code”:”4″,”product_name”:”Product4″,”product_price”:400,”product_detail”:”detail4″,”product_remarks”:”remarks4″,”created_at”:”2016-10-25 01:45:11″,”updated_at”:”2016-10-25 01:45:11″},
{“id”:6,”product_code”:”5″,”product_name”:”Product5″,”product_price”:500,”product_detail”:”detail5″,”product_remarks”:”remarks5″,”created_at”:”2016-10-25 01:45:11″,”updated_at”:”2016-10-25 01:45:11″},
{“id”:7,”product_code”:”6″,”product_name”:”Product6″,”product_price”:600,”product_detail”:”detail6″,”product_remarks”:”remarks6″,”created_at”:”2016-10-25 01:45:11″,”updated_at”:”2016-10-25 01:45:11″},
{“id”:8,”product_code”:”7″,”product_name”:”Product7″,”product_price”:700,”product_detail”:”detail7″,”product_remarks”:”remarks7″,”created_at”:”2016-10-25 01:45:11″,”updated_at”:”2016-10-25 01:45:11″},
{“id”:9,”product_code”:”8″,”product_name”:”Product8″,”product_price”:800,”product_detail”:”detail8″,”product_remarks”:”remarks8″,”created_at”:”2016-10-25 01:45:11″,”updated_at”:”2016-10-25 01:45:11″},
{“id”:10,”product_code”:”9″,”product_name”:”Product9″,”product_price”:900,”product_detail”:”detail9″,”product_remarks”:”remarks9″,”created_at”:”2016-10-25 01:45:11″,”updated_at”:”2016-10-25 01:45:11″}]
6, もう少し見やすいように、見た目(View)を定義する
resources/view/product/index.blade.phpファイルを生成
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26  | 
						<table border='1'>        <thead>     <tr>         <th>ID</th>             <th>商品コード</th>         <th>商品名</th>         <th>商品価格</th>         <th>商品詳細</th>         <th>備考</th>     </tr>     </thead>     <tbody>     @foreach($products as $product)         <tr>             <td>{{ $product->id }} </td>                         <td>{{ $product->product_code }} </td>                 <td>{!! link_to(action('CartController@add', ['id' => $product->id , 'qty' => 1]), $product->product_name) !!}</td>                <td>{{ $product->product_price }} </td>                 <td>{{ $product->product_detail }} </td>                 <td>{{ $product->product_remarks }} </td>             </tr>     @endforeach     </tbody> </table>  | 
					
7, 直接表示せずに、ビューに渡すようにする
| 
					 1 2 3 4 5 6 7 8 9 10 11  | 
						// 商品一覧 Route::get('/product', function () {     //全商品を取得         $products = App\Product::all();     // ブラウザ上に表示     // return $products;     return view('product.index')->with(compact('products'));     });  | 
					
8, 商品名をクリックしたら、個数1個でカートに入れ、カートの状態を表示する
まず、CartControllerを生成する。
php artisan make:controller CartController
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36  | 
						use App\Product; // 商品情報モデル use \Cart; // カートモデル("gloudemans/shoppingcart"をComposerでインストールした。appフォルダ直下にあるわけではない) class CartController extends Controller {     //カートに商品を追加する     public function add($product_id, $buy_num) {         //購入した商品情報を取得             $product = Product::findOrFail($product_id);         // カートをクリア         //Cart::destroy();         // 商品ID, 商品名, 個数, 値段, 詳細情報         Cart::add([           [             'id' => $product->product_code,              'name' => $product->product_name,              'qty' => $buy_num,              'price' => $product->product_price,              'options' => ['product_detail' => $product->product_detail, 'product_remarks' => $product->product_remarks]           ]         ]);         // カートの中身を返す         $carts = Cart::content();         return view('cart.index')->with(compact('carts'));         }         //カートをリセット     public function reset() {         Cart::destroy();         return redirect('product'); // 商品一覧に戻る     }   | 
					
9, ビューの商品名をリンク(カート追加)に変更する
| 
					 1 2  | 
						旧) <td>{{ $product->product_name }} </td>  新) <td>{!! link_to(action('CartController@add', ['id' => $product->id , 'qty' => 1]), $product->product_name) !!}</td>     | 
					
10, カートの中身を表示するビューも作る
| 
					 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38  | 
						カートの内容 <table border='1'>        <thead>     <tr>          <th>商品コード</th>         <th>商品名</th>         <th>商品価格</th>                 <th>個数</th>         <th>商品詳細</th>         <th>備考</th>         <th>消費税</th>         <th>小計</th>     </tr>     </thead>     <tbody>     @foreach($carts as $cart)         <tr>             <td>{{ $cart->id }} </td>                         <td>{{ $cart->name }} </td>                  <td>{{ $cart->price }} </td>                                           <td>{{ $cart->qty }} </td>                 <td>{{ $cart->options->product_detail }} </td>               <td>{{ $cart->options->product_remarks }} </td>               <td>{{ $cart->tax * $cart->qty }} </td>               <td>{{ $cart->subtotal  }} </td>           </tr>     @endforeach     </tbody> </table> <br> 合計金額 {{ Cart::total() }}円<br><br> {!! link_to('product', '買い物を続ける', ['class' => 'btn btn-primary']) !!} <button>購入</button> {!! link_to('cart/reset', 'カートクリア', ['class' => 'btn btn-primary']) !!}  | 
					
11, route.phpにルーティングを記述する(URLと処理を結びつける)
| 
					 1 2 3 4  | 
						// カートに商品を追加(商品ID、購入個数) Route::get('/cart/add/{product_id}/{buy_num}', 'CartController@add');   // カート・リセット Route::get('/cart/reset', 'CartController@reset');    | 
					
カート内の商品を個別に削除したり、個数変更できるようにしないとな…。

