Laravel Красноречивый восторг для сводной таблицы - PullRequest
0 голосов
/ 30 марта 2020

Я сейчас работаю над проектом laravel, но я застрял в поиске правильных красноречивых отношений.

Мои таблицы и соединения (должны) выглядеть следующим образом: Отношения проекта

Мои отношения модели выглядят так:

Пользователь

    public function team() 
{
    return $this->hasMany(Team::class, 'user_id');
}

public function evaluation() 
{
    return $this->hasMany(Evaluation::class, 'user_id');
}

Команда

public function user()
{
   return $this->belongsTo(User::class);
}
public function survey()
{
    return $this->hasMany(Survey::class, 'team_id');
}

Оценка

public function user()
{
   return $this->belongsTo(User::class);
}

public function survey()
{
return $this->hasMany(Survey::class, 'evaluation_id');
}

Опрос

public function team()
{
return $this->belongsTo(Team::class);
}

public function evaluation()
{
return $this->belongsTo(Evaluation::class);
}

public function surveyresponse()
{
return $this->hasMany(SurveyResponse::class, 'survey_id');
}

SurveyResponse

public function survey()
{
return $this->belongsTo(Survey::class);
}

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

Это путь к go? Нужно ли здесь отношение "Имеет много через"? Или «Полиморфизм c Отношения»?

1 Ответ

0 голосов
/ 30 марта 2020

Мне кажется правильным, я просто не видел модель TesteQuestion (ваше последнее отношение).

Отвечая на ваш вопрос:

HasManyThrough Отношение - это всего лишь ярлык для доступа к удаленным отношениям через промежуточное отношение, в вашем случае: у пользователей много оценок, в которых проводится много опросов. С помощью этого отношения вы можете получить все опросы от пользователя.

Ваше отношение будет выглядеть так:

/** * Get all of the surveys for the user. */ public function surveys() { return $this->hasManyThrough('App\Survey', 'App\Evaluation'); } Вы можете получить доступ к этому отношению, как это:

$user->surveys();

Но вы можете достичь того же (без использования HasManyThrough ), выполнив:

$user->evaluations()->surveys();

Остерегайтесь, что это будет верните оценки тоже , а не только опросы, и это требует дополнительной обработки.

Так что я рекомендую использовать отношение HasManyThrough, если вы претендуете на частый доступ к опросам.

...