У меня есть сводная таблица product_product, где продукты могут быть связаны от многих ко многим, но, в свою очередь, у меня также есть другое отношение, у продукта может быть только один родитель.
Составной продукт может иметь много общих продуктовИ общий продукт может иметь много составных родителей. У альтернативного продукта может быть много общих продуктов, а у общего продукта может быть только один вариантный родитель.
Какие у меня должны быть отношения?
Я работаю с laravel 5.7
и php 7.2
, у меня есть таблица products
с id
и сводная таблица product_product
с id
, product_id
(сын) и parent_product_id
(отец)
class Product {
public function variantParent()
{
return $this->hasOne(ProductProduct::class, 'product_id')->where('qty', '=', 0);
}
public function variantsChildren()
{
return $this->belongsToMany(self::class, 'product_product', 'parent_product_id', 'product_id')
->withPivot('qty')->where('qty', '=', 0);
}
public function compoundParents()
{
return $this->belongsToMany(self::class, 'product_product', 'product_id', 'parent_product_id')
->withPivot('qty');
}
public function compoundChildren()
{
return $this->belongsToMany(self::class, 'product_product', 'parent_product_id', 'product_id')
->withPivot('qty');
}
}
В этот момент отношение variantParent
возвращает мне экземпляр сводной таблицы ProductProduct
.
Отношение variantsChildren
возвращает коллекцию Products
(это нормально).
Мне нужно отношение variantParent
, чтобы вернуть Product
экземпляр, а не коллекцию.