Модели Laravel, подключенные через таблицу отношений - PullRequest
0 голосов
/ 27 сентября 2019

Я борюсь с Laravel и его модельной взаимосвязью.У меня есть следующее:

4 таблицы (Chapter, Headline, Question, CHQRelation)

Я создал модели для всех из них, но теперь яинтересно как их соединить.В конце я хочу получить для данной комбинации глава / заголовок все заданные вопросы.
Моей первой попыткой было установить соединение hasMany от Chapter до CHQRelation, чтобы получить все отношениякоторые имеют ту же главу.Тогда мне понадобится отношение hasMany от CHQRelation до Headline, чтобы получить все заголовки, а затем еще одно отношение hasMany к Question, чтобы получить их.Я полагаю, что это сложный путь, но я не могу найти более легкий путь, и мне нужно немного подтолкнуть в правильном направлении

Ответы [ 2 ]

0 голосов
/ 27 сентября 2019

Таблицы :

- chapters 
id

- c_h_q_relations
id
chapter_id

- headlines
id
c_h_q_relation_id

- questions
id
c_h_q_relation_id

Соотношения моделей:

class Chapter extends Model
{
    public function cHQRelations()
    {
        return $this->hasMany('App\CHQRelation');
    }
}

class CHQRelation extends Model
{
    public function headlines()
    {
        return $this->hasMany('App\Headline');
    }

    public function questions()
    {
        return $this->hasMany('App\Question');
    }

    public function chapter()
    {
        return $this->belongsTo('App\Chapter');
    }
}

class Headline extends Model
{
    public function cHQRelation()
    {
        return $this->belongsTo('App\CHQRelation');
    }
}

class Question extends Model
{
    public function cHQRelation()
    {
        return $this->belongsTo('App\CHQRelation');
    }
}

См. Также:

Лучшие практики Laravel

Красноречивое отношение hasMany

Красноречивое отношение к отношениям

0 голосов
/ 27 сентября 2019

Я думаю, вам следует перейти к https://laravel.com/docs/5.8/eloquent-relationships для дальнейшей документации по связям с моделями

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