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

时间:2017-08-27 18:55:41

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

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

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

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);
}

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

{{1}}

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

1 个答案:

答案 0 :(得分:11)

您可以使用$visits = Visit::find($visit_id); $visits->products()->wherePivot('product_id','=',$product_id)->detach(); 方法从访问中分离特定产品。

detach()

<强>更新Laravel docs“附加/分离”部分所述,您可以在$visits = Visit::find($id); $visits->products()->detach($product_id); 方法中传递要删除的相关模型的ID。实施例

$level[0] = $parent_id;
        for ($i=0; $i<6; $i++ )
        {
            $j = $i+1;
            $search = "SELECT parent_id FROM `$database`.`$mem` where id='$level[$i]'";
            $result = mysqli_query($con, $search);
            $row = mysqli_fetch_array($result);
            $level[$j] = $row['parent_id'];
        }