【问题标题】:If value exist in database don't save Laravel如果数据库中存在值,请不要保存 Laravel
【发布时间】:2018-06-19 15:25:19
【问题描述】:

我正在创建一个愿望清单,用户可以在其中保存自己的产品并保存它们。我想要的是用户不能多次保存产品。 所以,我正在做的是,如果数据库中存在 product_id,我不想保存新记录。

这是我的代码,我做错了什么?

public function addWishlist(Wishlist $wishlist) {        
    $wishlist->user_id = request('user_id');
    $wishlist->product_id = request('product_id');

    if(DB::table('wishlists')->where('product_id' !== $wishlist->product_id)) {
        $wishlist->save();
        return redirect()->back();
    }
}

【问题讨论】:

标签: php laravel laravel-5.5


【解决方案1】:

这个呢

public function addWishlist(Wishlist $wishlist) {  
    $userId = request('user_id');
    $productId = request('product_id');

    $found = Wishlist::where('user_id', $userId)->where('product_id', $productId)->count();

    if($found == 0) {
        $wishlist->user_id = $userId;
        $wishlist->product_id = $productId;
        $wishlist->save();
        return redirect()->back();
    }
}

【讨论】:

  • 谢谢,但是更改我调用此函数的代码会很麻烦。
  • @danhergir 我更新了我的答案,您可以在代码中进行这些更改。它应该工作
  • 你做到了。非常感谢。
【解决方案2】:
public function addWishlist(Wishlist $wishlist) {   

    if(DB::table('wishlists')->where(['user_id'=>$user_id,'product_id'=>$wishlist->product_id])->exists()){
         // record already exist 
         return redirect()->back();
    }else{
         // record not exist , save the record
         $withlist = new Wishlist();     
         $wishlist->user_id = request('user_id');
         $wishlist->product_id = request('product_id');
         $wishlist->save();
         return redirect()->back();
    }
}

【讨论】:

  • 我不明白为什么,但是如果product_id的值保存在数据库中,它会一直保存记录。
【解决方案3】:

你可以使用firstOrNew,你需要检查user_idproduct_id组合

    $wishlist::firstOrNew(array('user_id' => request('user_id'),'product_id'=>request('product_id')));
    $wishlist->user_id = request('user_id');
    $wishlist->product_id = request('product_id');
    $wishlist->save();
    return redirect()->back();

【讨论】:

  • 它无法正常工作。如果 product_id 重复,它会保存记录。所以,我遇到了同样的问题
  • 你注意到you need to check with user_id and product_id combination这行了吗? @danhergir
  • 我只需要检查product_id。我更改了您的代码,但它仍然无法正常工作
  • 如果您不检查用户 ID 意味着 .if 用户选择一种产品意味着。 B 用户不能选择该产品。可以吗? @danhergir
  • 不,我的意思是如果用户将该产品添加到愿望清单中,则该用户不能再这样做了。
【解决方案4】:

你有没有尝试过 firstOrCreate()

 $user = User::firstOrCreate(['email' => $email])

【讨论】:

    猜你喜欢
    • 2020-10-22
    • 2019-07-03
    • 2020-03-15
    • 1970-01-01
    • 2017-12-01
    • 1970-01-01
    • 2020-12-18
    • 2023-03-12
    • 2016-02-15
    相关资源
    最近更新 更多