Merhaba,
3 tane veritabanı tablosu oluşturdum.
1 - Ürün tablosu
2- Kategori Tablosu
3 - Kategori - Ürün id Eşleştirme tablosu
Product:
id
productID
productName vb.
Category:
id
categoryID
categoryName
categoryParentID vb.
ProductCategoryMatches:
product.id (foreignID)
category.id (foreignID)
IntegrationCategoryModel:
public function children(): \Illuminate\Database\Eloquent\Relations\HasMany
{
return $this->hasMany(IntegrationCategory::class, 'categoryParentID');
}
public function products(): \Illuminate\Database\Eloquent\Relations\BelongsToMany
{
return $this->belongsToMany(IntegrationProduct::class,
'integration_product_category_matches', 'categoryID',
'productID');
}
Aşağıdaki kullanımda , kırılımdaki bir id ye denk geliyorsa ürün listesini alabileceğimi belirtmişler. Ama denediğimde yapamadım. where kısmını ben ekledim. Örnek referans: https://stackoverflow.com/questions/61044876/cannot-get-children-category-product-in-laravel
$data = IntegrationCategory::with(['children' => function ($query) {
$query->with('products');
}])->where('id', 2)->get('id');
Örnek vermek gerekirse:
Kategori kırılımı = 126 > 128 > 130 > 131 şeklinde bir kırılım olsun.
Ürünümde 130 var diyelim. Eşleştirme tablosunda 130 tutuyorum. Sadece bu id ile ürün tablosuna gidip ortak bir küme almam lazım.
Orada da 126 id 'si geldi ve 130 'id 'si geldi. 126 hepsini kaplayacağı için. 130 id si benim için geçersiz kalacak. Ama bu ürünlerin birleşimini almam gerekecek. Biraz karışık anlatmış olabilirim.