У меня есть таблицы с иностранным ключом, у которых есть еще один иностранный ключ к другой таблице, и мне нужно присоединиться к красноречивым этим 3 таблицам.
У меня есть таблицы:
Films
- ID
- FilmsName
FilmsTags
- FilmID
- TagID
Tags
- ID
- Tagname
В режиме Eloquent у меня есть:
Films
public filmstags_items(){
return $this->hasMany(FilmsTags::class, 'FilmID', 'id');
}
FilmsTags
public film_item(){
return $this->hasOne(Films::class, 'id', 'FilmID');
}
public tag_item(){
return $this->hasOne(Tags::class, 'id', 'TagID');
}
Tags
public filmstags_items(){
return $this->hasMany(FilmsTags::class, 'TagID', 'id');
}
Могу ли я сделать что-то подобное на своих красноречивых модельных фильмах, чтобы присоединиться к столам?
public join_all(){
return $this->hasMany(FilmsTags::class, 'FilmID', 'id')->hasOne(Tags::class, 'TagID', 'id');
}
Если нет, скажите, пожалуйста, как это сделать красноречиво. Я знаю, что могу составить предложение соединения с помощью SQL, но я хочу научиться красноречиво.
Спасибо.
Связь между Film и Tag (единичные названия моделей) должна быть belongsToMany()
, при этом FilmTag
является промежуточной (сводной) таблицей, для которой модель не требуется. Прочтите документы здесь: laravel.com/docs/5.6/eloquent-relationships#many-to-many
Чтобы использовать запрос, вы можете использовать $ film-> with ('filmstags_items.tagitem') -> get () вернет коллекцию фильмов с тегами film с tagitem
прочтите документы laravel. Примечание: модель должна быть в единственном числе.