在laravel中检查数据库中是否存在值

时间:2017-11-02 02:01:37

标签: php laravel

我有wishlist系统,我保存dependencies { compile project(":dia-db") compile project(":dia-datamodel") .... user_id,我想在保存到wishlist表之前检查,看看用户是否已经保存过此产品。

我发现了一些关于此的问题和文章但是所有这些都只验证了1个值,而不是两个,我需要的是在保存之前检查product_idauth::user()->id

这是我的商店方法:

product->id

这是我的表格:

  public function store(Request $request)
    {
      //Validating title and body field
      $this->validate($request, array(
          'user_id'=>'required',
          'product_id' =>'required',
        ));

      $wishlist = new Wishlist;

      $wishlist->user_id = $request->user_id;
      $wishlist->product_id = $request->product_id;


      $wishlist->save();

      return redirect()->back()->with('flash_message',
          'Item, '. $wishlist->product->title.' Added to your wishlist.');
    }

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用firstOrCreate()而忘记验证复合键。

public function store(Request $request)
{
    $data = $request->validate([
        'user_id'    => 'required',
        'product_id' => 'required'
    ]);

    $wishlist = Wishlist::firstOrCreate($data);

    return redirect()
        ->back()
        ->with('flash_message', 'Item, ' . $wishlist->product->title . ' added to your wishlist.');
}

firstOrCreate()方法将尝试使用给定数据从您的愿望清单表中查找记录,如果找不到,将创建一个新记录并将其返回。

换句话说,如果它找不到具有给定user_idproduct_id值的记录,则会创建一个新记录。

或者您可以像已经建议的那样注册custom validation rule

答案 1 :(得分:1)

您可以使用isset函数检查属性是否已设置

public function store (Request $request)
{

          // backend validator goes code here
          $status=Wishlist::where('user_id',Auth::user()->id)
                                           ->where('product_id',$request->product_id)
                                           ->first();

           if(isset($status->user_id) and      isset($request->product_id))
           {
                  //Return to already added page
           }
          else
          {
                  //Return to successfully added page
          }

}