提问者:小点点

Laravel 7.14同步/附加cart_id到product_id一对多关系


我有一个产品表,用户可以添加产品到购物车通过选择复选框多个产品。 问题在于一对多关系同步。

我的购物车型号:

protected $fillable = [
    'currency',
    'price',
    'user_id',
];

//Table Names
protected $table = 'carts';

public function product()
{
    return $this->belongsToMany(Product::class);
}

我的产品型号:

public function carts()
{
    return $this->hasMany(Cart::class);
}

我的cart_products数据表

cart_id and product_id

当我将多个产品保存到购物车时,它会被添加,并且只与最后的cart_id同步。 所有product_id都正确。

我的CartController:

public function store(Request $request)
{

    $this->validate($request, [
        'product_id' => 'required',
        'currency' => '',
        'price' => '',
    ]);

    $user = Auth::user()->id;

    $product_id = $request->product_id;

    // dd($product_id);

    foreach($product_id as $cart) {
        // dd($cart[0]);
        $cart = Cart::create([
            'currency' => $request['currency'],
            'price' => $request['price'],
            'user_id' => $user,
        ]);
    }
    
    $cart->product()->sync($product_id);

    return redirect()->back()->with('toast_success', 'Item(s) added in cart');
}

我还需要帮助了解如何正确同步cart_id。


共2个答案

匿名用户

使用sync可以删除参数中没有的所有关系。 有一种在不删除旧关系的情况下进行同步的方法SyncWithoutDetaching()

改变电话,可以帮助你不解除旧关系。 你只需要考虑他们如何从购物车中移除物品。

$cart->product()->syncWithoutDetaching($product_id);

匿名用户

难怪,因为同步产品关系是在循环之外的,为什么它只设置为最后一辆车。 将同步移入循环,如下所示:

    foreach($product_id as $cart) {
        $cart = Cart::create([
            'currency' => $request['currency'],
            'price' => $request['price'],
            'user_id' => $user,
        ]);
    $cart->product()->sync($product_id);
    }