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

标签 php laravel many-to-many sql-delete

每次访问我可能有很多产品;因此数据透视表 (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/

相关文章:

laravel - 在 Laravel 5 中跨子域保持 session

php - MYSQL表有静态值和动态值

php - 为什么 MAMP 不显示错误?

php - 从 PHP 中的多个 cURL 返回 http 状态代码

javascript - 在 Laravel 中使用 React

sql - 过滤多对多 (PostgreSQL)

php - PDOExeption SQLSTATE[HY001] 无法分配足够的内存

php - Laravel 5.6 将日期时间保存到数据库

Django ORM : Optimizing queries involving many-to-many relations

asp.net-core - 如何在 EF Core 上创建自定义导航属性