В Laravel Eloquent как определить отношения через вторичную таблицу? (Всегда возвращает 0 отношений) - PullRequest
0 голосов
/ 08 ноября 2019

Я чувствую, что это должно работать. У меня есть список товаров и категорий (типов).

Таблицы:

Products
    - id
    - name
    - etc
Types
    - id
    - name
    - etc
ProductTypes
    - product_id
    - type_id

Теперь я чувствую, как в модели Type в Laravel, я должен быть в состоянии определить это отношение:

public function products()
{
    return $this->hasManyThrough(Product::class, ProductType::class, 'type_id', 'id');
}

Iпробовал другие варианты со вторичными идентификаторами в дополнительных параметрах, но не повезло, всегда пустой список. Является ли ProductTypes сводной таблицей, и поэтому к ней следует обращаться по-другому?

Редактировать: Что странно, что для последних 2 параметров ($localKey = null, $secondLocalKey = null), даже если я ввожу полный мусор, никаких ошибок не выдается, кроме этих 2параметры $firstKey = null, $secondKey = null должны быть правильными).

1 Ответ

0 голосов
/ 08 ноября 2019

Вы используете неправильные отношения. Исходя из структуры вашей базы данных, продукт может относиться ко многим типам. Следовательно, это должно быть BelongsToMany вместо HasManyThrough.

. Вы можете достичь желаемого с помощью следующего метода, передавая имя таблицы вашего ProductTypes в качестве второго параметра:

public function products()
{
    return $this->belongsToMany(Product::class, 'product_types');
}

Если ваша ProductType модель расширяет Illuminate\Database\Eloquent\Relations\Pivot, вы можете сделать:

public function products()
{
    return $this->belongsToMany(Product::class, 'product_types')
        ->using(ProductType::class);
}

Для получения дополнительной информации об отношениях «Многие ко многим»: https://laravel.com/docs/6.x/eloquent-relationships#many-to-many

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