Bileşik bir anahtarı olan bir ilişki tarafından birleştirilen 2 modelim var - bunlar Ürün ve Kategori. Tüm tablolarda yumuşak silmeler kullanmam gerekiyor, bu nedenle modeller ve ilişkiler gerektiğinde geri yüklenebilir. Benim Ürün modelindeBileşik anahtarlarla ilişkiyi silme/ayırma ve geri yükleme/geri yükleme
Ben: Benim Kategori modelinde
function categories()
{
return $this->belongsToMany('App\Category', 'product_categories')->whereNull('product_categories.deleted_at')->withTimestamps();
}
Ben:
$category->products->contains($product->id)
gibi sorgular aksi yumuşak dönen gibi
function products()
{
return $this->belongsToMany('App\Product', 'product_categories')->whereNull('product_categories.deleted_at')->withTimestamps();
}
ben başka bir yerde whereNull yöntemi zincirleme hakkında okumak ilişki silindi.
Sorgu, bu silinen ilişkiyi silme ve geri yükleme işlemlerini gerçekleştirmenin en iyi yolu nedir? örneğin, geri, ben denedim: (Bu product_categories için kategoriler tablosunu katıldığı için)
$product->categories()->restore($category_id);
yukarıda deleted_at alan belirsiz olduğunu söyleyerek bir SQL hatası üretti.
Güncelleştirmesi - Kök sorun, sahip olduğu boşluğun görünürTMany sınıfının yumuşak silme işlemlerini desteklememesidir. Bu nedenle, ekleme, çıkarma ve eşitleme işlemlerinin tümünü silmeleri gerçekleştirir. Bu dersi geçersiz kılacak en iyi yaklaşım hangisi olurdu?
// SoftDeletePC.php
trait SoftDeletePC {
// SoftDelete
public function softDeleteProductCategory($productId, $categoryId)
{
\DB::table('product_categories')
->where('product_id', $productId)
->where('category_id', $categoryId)
->update(['deleted_at' => \DB::raw('NOW()')]);
}
// Restore
public function restoreProductCategory($productId, $categoryId)
{
\DB::table('product_categories')
->where('product_id', $productId)
->where('category_id', $categoryId)
->update(['deleted_at' => null]);
}
}
: Temelde
teşekkürler. Sadece Laravel ile çalışmaya başladım ve daha önce hiç bir şeyle karşılaşmadım. Yaklaşımınız aslında ortaya çıkmış olana benziyor - yani bunun üstesinden gelmek için özel yöntemler. İdeal olarak, basit yöntemlerin yumuşak silme işlemlerini desteklemesini istiyorum - dürüst olmak gerekirse, bunun ne kadar mümkün olduğundan emin değilim. Bir yanıt olarak kendi oluşturduğum senkronizasyon sürümümü göndereceğim. – BrynJ