2017-08-27 2 views
1

Pour chaque visite, il se peut que j'aie beaucoup de produits; par conséquent, le tableau croisé dynamique (product_visit) contient les champs: id, product_id, visit_id, qtd et amount.Laravel 5.4 - Suppression d'enregistrements spécifiques du tableau croisé dynamique

Pour supprimer une visite et ses documents connexes sur le tableau croisé dynamique, tout fonctionne très bien:

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

Cependant, je ne pouvais pas comprendre comment supprimer un enregistrement spécifique du tableau croisé dynamique à l'aide de détacher ou quelque chose de similaire . Donc, je fini par faire ce qui suit:

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

Bien qu'il fonctionne, je suis bien content de étant cette solution - on dirait que je me manque quelque chose.

Répondre

1

Vous pouvez utiliser la méthode wherePivot() pour détacher un produit spécifique de la visite.

$visits = Visit::find($visit_id); 
$visits->products()->wherPivot('product_id','=',$product_id)->detach(); 

Mise à jour comme indiqué dans Laravel docs section « Fixation/démontage », vous pouvez passer l'id du modèle associé que vous souhaitez supprimer dans la méthode detach(). Exemple

$visits = Visit::find($id); 
$visits->products()->detach($product_id); 
+0

Travaillé parfaitement! Merci beaucoup, @jaysingkar –