Laravel 5.4 - 从数据透视表中删除特定记录

问题描述:

对于每次访问,我可能会有很多产品;因此透视表(product_visit)具有以下字段: id,product_id,visit_id,qtd和金额。Laravel 5.4 - 从数据透视表中删除特定记录

要删除的访问和数据透视表的相关记录,一切工作正常:

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()->wherPivot('product_id','=',$product_id)->detach(); 

更新 作为Laravel docs“安装/拆卸”一节中给出,您可以通过要在detach()方法来删除相关模型的ID。示例

$visits = Visit::find($id); 
$visits->products()->detach($product_id); 
+0

工作完美!非常感谢,@ jaysingkar –