Как правильно связать модель с другими моделями по ID?

Рейтинг: 1Ответов: 1Опубликовано: 08.08.2023

Подскажите, у меня есть модель ContentTag (id, tag_code)

Также есть еще модель Content (id, content_tag_id, content)

Как реализовать связь у Content с другими моделями, чтобы потом по значениям этих связей вызывать нужный Content

Например, такой функцией:

getContent('text_1', ['Brand' => 1, 'Model' => 92), где text1 - это tag_code у ContentTag, а значения в массиве - айдишники моделей

Ответы

▲ 1Принят

В документации laravel, все написано про связи.

Вам надо наглядно понять все связи, к примеру (hasOne, hasMany)

В вашем примере видно что у каждого Content может быть только один ContentTag.

Значит в модели Content связь будет выглядить так.

public function contentTag(): HasOne
{
    return $this->hasOne(ContentTag::class, 'id', 'content_tag_id');
}

А обратная связь как видно hasMany. Тоесть один ContentTag может иметь много Content. И связь в нем будет выглядить следующим образом.

public function contents(): HasMany
{
    return $this->hasMany(Content::class, 'content_tag_id', 'id');
}

А запрос в вашем случае будет выглядеть так.

ContentTag::where('tag_code', 'text1')->with('contents')->get();