Ho 2 modelli che sono uniti da una relazione che ha una chiave composta - questi sono Prodotto e Categoria. Devo utilizzare eliminazioni software su tutte le tabelle, in modo che i modelli e le relazioni possano essere ripristinati, se necessario.Soft eliminazione/scollegamento e ripristino/associazione di relazioni con i tasti compositi
Nel mio modello prodotto che ho:
function categories()
{
return $this->belongsToMany('App\Category', 'product_categories')->whereNull('product_categories.deleted_at')->withTimestamps();
}
nella mia categoria modello che ho:
function products()
{
return $this->belongsToMany('App\Product', 'product_categories')->whereNull('product_categories.deleted_at')->withTimestamps();
}
ho letto altrove su concatenamento il metodo whereNull, come query come $category->products->contains($product->id)
sono stati altrimenti tornando il soft relazioni cancellate.
La mia domanda è qual è il modo migliore per gestire l'eliminazione e il ripristino di queste relazioni eliminate dall'utente? Per il ripristino, per esempio, ho provato:
$product->categories()->restore($category_id);
che questo prodotto un errore SQL dicendo che il campo deleted_at era ambigua (perché è entrato nel tavolo categorie a product_categories).
Aggiornamento - Sembra che il problema principale è che la classe BelongsToMany non supporta eliminazioni soffici - così attaccare, staccare e sincronizzare tutti eseguire eliminazioni duri. Quale sarebbe l'approccio migliore per ignorare questa classe?
grazie per il suggerimento. Ho appena iniziato con Laravel e non ho mai incontrato caratteristiche particolari. Il tuo approccio è in realtà simile a quello che ho scoperto, cioè metodi personalizzati per gestirlo. Idealmente, mi piacerebbe semplicemente che i metodi predefiniti supportino le eliminazioni software, anche se, onestamente, non sono sicuro di quanto sia fattibile. Pubblicherò come risposta la mia versione di sincronizzazione che ho creato. – BrynJ