每次拜访,我可能会有很多产品;因此,数据透视表(product_visit)具有以下字段:
ID,product_id,visit_id,qtd和金额。
要删除数据透视表上的访问及其相关记录,一切正常:
public function getVisitDelete($id){
$visits = Visit::find($id);
$visits->products()->detach();
$visits->delete();
}
但是,我无法弄清楚如何使用分离或类似方法从数据透视表中删除一条特定记录。因此,我最终完成了以下操作:
public function getProductVisitDelete(){
$visit_id = (int)Request('visit_id');
$product_id = (int)Request('product_id');
$sqlDelete = "delete from product_visit where visit_id=$visit_id and product_id = $product_id";
DB::select($sqlDelete);
}
尽管它可行,但我对这种解决方案感到非常满意-好像我缺少了一些东西。
最佳答案
您可以使用wherePivot()
方法从访问中分离出特定产品。
$visits = Visit::find($visit_id);
$visits->products()->wherePivot('product_id','=',$product_id)->detach();
更新
如Laravel docs“附加/分离”部分所述,您可以在
detach()
方法中传递要删除的相关模型的ID。例子$visits = Visit::find($id);
$visits->products()->detach($product_id);