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)