2015-09-15 4 views
1

Я создаю модуль обследования в Ларавеле с объектами Survey, который hasMany('SurveyQuestion'); (в основном JOIN ing survey.id = survey_questions.survey_id).Laravel Eloquent - hasMany + more

Однако есть несколько вопросов (с опросом_id = 0, который не соответствует ни одному Survey), который я хотел бы задать во всех опросах (а именно, имя, адрес электронной почты и т. Д.).

Можно ли установить hasMany-отношение, чтобы добавить эти 2 вопроса (в основном WHERE survey_questions.survey_id = survey_id OR survey_questions.survey_id = 0)?

+0

Почему у вас есть идентификатор нуля? –

+2

Как он объяснил, я считаю, что они «глобальные» вопросы – samlev

+2

Это пахнет неприятностью. Почему бы просто не лечить эти два вопроса, как любой другой вопрос, так как вы спрашиваете их в каждом опросе? или связывать их с пользователем и рассматривать их как нечто, что происходит во время процесса регистрации. – mgrueter

ответ

1

Вы могли бы попробовать что-то вроде этого на модели обследования:

public function questions() { 
    return $this->hasMany('SurveyQuestion')->orWhere('survey_questions.survey_id', '0'); 
} 
2

Имейте функцию, которая возвращает отношения, то есть другой публичную функцию, которая вызывает то, и подставляет дополнительные записи в коллекции.

function surveyquestions() { 
    return $this->hasMany('SurveyQuestion'); 
} 

function getPaddedSurveyQuestions() { 
    $padded = SurveyQuestions::getId0QuestionsHere(); 
    return $this->surveyquestions()->merge($padded); 
} 

Это грубый код, как вам нужно, чтобы найти ID = 0 SurveyQuestions в более управляемым способом, и вы, возможно, придется использовать галерею-> добавьте в начале() вместо слияния(), чтобы получить мягкие вопросы где вы хотите их, но это может дать вам какое-то направление.