2016-03-25 3 views
2

У меня есть следующая структура базы данныхLaravel 5 Красноречивый Realtionship имеет одно сквозное

products   quesionnaires   questionnaire_results 
--------   --------------   ---------------------- 
id     id      id 
questionnaire_id       questionnaire_id 
              product_id 

вопросник может быть использован для нескольких продуктов, и результатов хранения для каждого продукта, друг от друга, в таблице questionnaire_results.

Продукт может содержать только один вопросник и только один результат его вопросника.

Мне нужен способ получить из Product Model результат его Анкеты.

ответ

4

Если вы не имеете QuestionnaireResult модели, то нет прямого Eloquent отношения к этому, как и все взаимоотношения по умолчанию зависит от наличия красноречивых моделей. Тем не менее, существует довольно чистый способ достичь этого, рассматривая его как отношение Product и Questionnaire и обрабатывая questionnaire_results в качестве сводной таблицы (даже если вы действительно знаете , что продукт будет принадлежать только одному вопроснику).

Модель продукта:

public function questionnaire() { 
    return $this->belongsToMany('App\Questionnaire', 'questionnaire_results'); 
} 

Анкета модели:

public function products() { 
    return $this->belongsToMany('App\Product', 'questionnaire_results'); 
} 

В этой связи будет возвращать коллекцию, вам необходимо либо открыть первый массив с [0] или использовать метод first().

$product->questionnaire()->first(); 

Однако, если вы сделать есть QuestionnaireResult модель, то у вас есть очень простой One to One отношения без необходимости проходить через другую модель. У вас есть некоторые результаты опроса, которые относятся к продукту, в то время как у продукта может быть только один набор ответов на вопросник (в соответствии с информацией о вашем сообщении).

Модель

продукта:

public function questionnaireResult() { 
    return $this->hasOne('App\QuestionnaireResult'); 
} 

Анкета Результат Модель:

public function product() { 
    return $this->belongsTo('App\Product'); 
} 
1
// Product Model 
public function quesionnaire() { 
    return $this->hasOne("App\Quesionnaire"); 
} 

// Quesionnaire Model 
public function questionnaire_result() { 
    return $this->hasOne("App\Questionnaire_result"); 
} 

$product->quesionnaire->questionnaire_result

Смежные вопросы