昨天的文章內容有些不能顯示~
貼到這裡
修改CartItem不用隱藏任何欄位

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class CartItem extends Model
{
   use HasFactory;
   protected $guarded = [''];   
   protected $appends = ['current_price'];
   public function getCurrentPriceAttribute()
   {
       return $this->quantity * 10;
   }
   public function product()
   {
       return $this->belongsTo(Product::class);
   }
   public function cart()
   {
       return $this->belongsTo(Cart::class);
   }
}
修改CartItemController的程式碼,加入套件
use App\Models\Cart;
use App\Models\CartItem;
修改store 程式碼
修改前程式碼:
public function store(Request $request)
    {
$messages =[
'required' => ':attribute 是必要的',    
'between' => ':attribute 的輸入 :input 不在 :min 和 :max 之間'
];
        //$form = $request->all();
$validator = Validator::make($request->all(),[
    'cart_id'=>'required|integer',
    'product_id'=>'required|integer',
    'quantity'=>'required|integer|between:1,10'
],$messages);
if($validator->fails()){
    return response($validator->errors(),400);
}
$validateData = $validator->validate();
        //DB::table('cart_items')->insert(['cart_id' => $form['cart_id'],
        DB::table('cart_items')->insert(['cart_id' => $validateData['cart_id'],
//'product_id' => $form['product_id'],
'product_id' => $validateData['product_id'],
//'quantity' => $form['quantity'],
'quantity' => $validateData['quantity'],
'created_at' => now(),
'updated_at' => now()]);
//return response(true);
return response()->json(true);
    }
```
----
修改後程式碼:
---
```
public function store(Request $request)
    {
$messages =[
'required' => ':attribute 是必要的',    
'between' => ':attribute 的輸入 :input 不在 :min 和 :max 之間'
];
        //$form = $request->all();
$validator = Validator::make($request->all(),[
    'cart_id'=>'required|integer',
    'product_id'=>'required|integer',
    'quantity'=>'required|integer|between:1,10'
],$messages);
if($validator->fails()){
    return response($validator->errors(),400);
}
$validateData = $validator->validate();
$cart = Cart::find($validateData['cart_id']);
$result = $cart->cartItems()->create(['product_id' => $validateData['product_id'],
'quantity' => $validateData['quantity']]);
        
return response()->json($result);
    
    
POSTMAN測試顯示

修改前程式碼:
public function update(UpdateCartItem $request, $id)
    {
        $form = $request->validated(); 
        DB::table('cart_items')->where('id',$id)
        ->update([
'quantity' => $form['quantity'],
'updated_at' => now()]);
return response()->json(true);
    }
修改後程式碼:
public function update(UpdateCartItem $request, $id)
   {
       $form = $request->validated(); 
       $item = CartItem::find($id);
       $item->fill(['quantity'=>$form['quantity']]);
       $item->save();
return response()->json(true);
   }
   
POSTMAN測試localhost:8000/cart-items/2
資料表查看:

修改後程式碼:改其他寫法
public function update(UpdateCartItem $request, $id)
   {
       $form = $request->validated(); 
       $item = CartItem::find($id);
       //$item->fill(['quantity'=>$form['quantity']]);
       $item->update(['quantity'=>$form['quantity']]);
       //$item->save();
return response()->json(true);
   }
POSTMAN測試
資料表查看:
修改 刪除的程式碼:
原來的程式碼:
public function destroy($id)
    {
        
        DB::table('cart_items')->where('id',$id)
        ->delete();
return response()->json(true);
    }
修改的程式碼:
public function destroy($id)
    {
        
        CartItem::find($id)->delete();
return response()->json(true);
    }

POSTMAN測試
資料表查看
修改CartController程式碼

修改前程式碼
public function index()
    {
        $cart = DB::table('carts')->get()->first();
        if(empty($cart)){
            DB::table('carts')->insert(['created_at' =>now(),'updated_at' =>now()]);
            $cart = DB::table('carts')->get()->first();
        }
        $cartItems = DB::table('cart_items')->where('cart_id',$cart->id)->get();
        $cart = collect($cart);
        $cart['items'] = collect($cartItems);    
        return response(collect($cart));
    }
修改後程式碼
加入套件use App\Models\Cart;
修改後程式碼
public function index()
   {
       $cart = Cart::with(['cartItems'])->firstOrCreate();
       return response($cart);
   }
先把資料庫資料刪掉
後再新增
POSTMAN測試
關聯的資料表修改資料讓下面可以帶出資料
POSTMAN測試localhost:8000/carts


軟刪除:畫面上看起來是刪除,在資料表中沒有被刪除
在terminal下指令php artisan make:migration add_soft_delete_to_cart-items
新增
原來的程式碼:
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddSoftDeleteToCartItems extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //
    }
}

加入程式碼:紀錄誰被刪除/刪除的時間

在terminal下指令php artisan migrate
沒新增先手動加入跑完流程
資料表查看
改CartItem程式碼加入套件: use Illuminate\Database\Eloquent\SoftDeletes;
修改程式碼:
修改程式碼變成強制軟刪除
use Illuminate\Database\Eloquent\SoftDeletes;
class CartItem extends Model
{
    use HasFactory, SoftDeletes;
    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope('softDeletes', function ($builder) {
            $builder->whereNull('deleted_at');
        });
    }
}

完整的程式碼:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class CartItem extends Model
{
    //use HasFactory;
    //use SoftDeletes;
    use HasFactory, SoftDeletes;
    protected static function boot()
    {
        parent::boot();
        static::addGlobalScope('softDeletes', function ($builder) {
            $builder->whereNull('deleted_at');
        });
    }
    protected $guarded = [''];   
    protected $appends = ['current_price'];
    public function getCurrentPriceAttribute()
    {
        return $this->quantity * 10;
    }
    public function product()
    {
        return $this->belongsTo(Product::class);
    }
    public function cart()
    {
        return $this->belongsTo(Cart::class);
    }
}


到CartItemController修改程式碼
程式碼:
public function destroy($id)
    {
        
        CartItem::find($id)->delete();
return response()->json(true);
    }

php artisan serve跑起來
POSTMAN看GET
POSTMAN看delete
資料表看
變成真的刪除的程式碼:
修改前:
public function destroy($id)
    {
        
        CartItem::find($id)->delete();
return response()->json(true);
    }
修改後:
public function destroy($id)
   {
       
       CartItem::withTrashed()->find($id)->forceDelete();
return response()->json(true);
   }
   
資料表看:15


大家明天見~