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

Sér*_*der 7 php many-to-many laravel sql-delete

每次访问我可能有很多产品; 因此,数据透视表(product_visit)具有以下字段:id,product_id,visit_id,qtd和amount.

要删除数据透视表上的访问及其相关记录,一切正常:

 public function getVisitDelete($id){
    $visits = Visit::find($id);
    $visits->products()->detach();
    $visits->delete();
}
Run Code Online (Sandbox Code Playgroud)

但是,我无法弄清楚如何使用detach或类似的东西从数据透视表中删除一个特定记录.所以我最终做了以下事情:

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);
}
Run Code Online (Sandbox Code Playgroud)

虽然它有效,但我对这个解决方案感到非常满意 - 看起来我错过了一些东西.

jay*_*kar 17

您可以使用wherePivot()方法从访问中分离特定产品.

$visits = Visit::find($visit_id);
$visits->products()->wherePivot('product_id','=',$product_id)->detach();
Run Code Online (Sandbox Code Playgroud)

更新Laravel文档 "附加/分离"部分中所述,您可以传递要在detach()方法中删除的相关模型的ID .例

$visits = Visit::find($id);
$visits->products()->detach($product_id);
Run Code Online (Sandbox Code Playgroud)