我有wishlist系统,我保存dependencies {
compile project(":dia-db")
compile project(":dia-datamodel")
....
和user_id
,我想在保存到wishlist表之前检查,看看用户是否已经保存过此产品。
我发现了一些关于此的问题和文章但是所有这些都只验证了1个值,而不是两个,我需要的是在保存之前检查product_id
和auth::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.');
}
感谢。
答案 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_id
和product_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
}
}