Какие отношения я должен использовать, чтобы связать модель с собой один на один? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть сводная таблица 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 экземпляр, а не коллекцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...