每次访问我可能有很多产品;因此数据透视表 (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 中所示“Attaching/Detaching”部分,您可以在 detach()
方法中传递要删除的相关模型的 id。示例
$visits = Visit::find($id);
$visits->products()->detach($product_id);
关于php - Laravel 5.4 - 从数据透视表中删除特定记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45908315/