【问题标题】:increment doesn't apply at the first time增量不适用于第一次
【发布时间】:2022-01-05 12:09:50
【问题描述】:

我是 laravel 的新手,我正在开发一个商店网站,但我陷入了项目的购物车部分。 为此,我使用带有ManyToMeny 关系的数据透视表

主要问题是当我第一次添加到购物车时它总是给我一个,但在第二次它增加了第三次它也增加了。我在数据透视表结构中进行了搜索,发现 1 作为默认值。

先添加

第一次添加的结果

第二次添加

第二次加的结果递增!

我不知道如何更改第一个给定 1 的值。我不知道要更改什么才能使第一个添加值像输入值一样。

我认为这段代码的预期结果是用输入数字给出的值增加 0 的值

这是我的控制器

$found = false;
$user = Auth::user();
$product = produit::find($id);
if (!$product || !$user) {
    abort(404);
}
if($product->rupture_stock == true){
    return redirect()->back()->with('error', 'Rupture de stock');
}
$panier = $user->panier;    


foreach ($panier->produits as $pr) {
    if ($pr->id == $id){
        $found = true;
        $qt = $pr->pivot->quantite;
        $first_num = $request->get('quantite');
        // $first_num = $_POST['quantite'];
        $second_num = 0;
        $result = '';
        // $qt = $_POST['quantite'];
        if (is_numeric($first_num) && is_numeric($second_num)) {
            $result = $first_num + $second_num;
            $qt += $result;
        }
        $panier->produits()->updateExistingPivot($pr->id, ['quantite' => $qt]);
    }
}
if (!$found) {
    $panier->produits()->attach($product->id);
}

这是我的刀

<form action="{{ url('add/'.$prod->id) }}" method="post" style="margin-bottom:20px" class="cart"  id="product_addtocart_form" enctype='multipart/form-data'>
@csrf
    <input type="number" value="" name="quantite"  class="text" step="1" min="1" max="11" size="4" placeholder="" inputmode="numeric" />
<button style="border-radius: 50px; /*padding:0 20px; margin-left:40px*/" type="submit" name="add-to-cart" value="352" class="single_add_to_cart_button button alt">Ajouter</button>
</form>

【问题讨论】:

  • 我看到一行带有$qt += $result。换句话说,你是在自己做。您可能应该在您的请求中发送quantite,这将是您想要的当前数量。所以没有添加/增量的东西,只需将其“设置”为给定值。
  • 当我做 value={{$prod->pivot->quantite}} 它总是返回Attempt to read property "quantite" on null

标签: php laravel eloquent logic laravel-blade


【解决方案1】:

你可以使用syncWithoutDetaching来做的更简单:

$user = Auth::user();
$product = produit::find($id);
if (!$product || !$user) {
    abort(404);
}
if($product->rupture_stock == true){
    return redirect()->back()->with('error', 'Rupture de stock');
}
$panier = $user->panier;    

$panier->produits()->syncWithoutDetaching([$id => ['quantite' => (int)request('quantite')]]);

https://laravel.com/docs/8.x/eloquent-relationships#syncing-associations

【讨论】:

  • 非常感谢我在这里卡了一段时间,非常感谢
猜你喜欢
  • 2012-04-12
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多