2015-09-07 40 views
1

我有一個是這樣的數據庫模式:Laravel 4.2 ORM - 查詢關係有三個表

user 
    id 
    name 

question 
    id 
    title 


answer 
    id 
    answer_text 
    user_id 
    question_id 

現在我要選擇具有給定的每一個問題回答所有問題,用戶的所有用戶。

我用這種方式嘗試:

用戶模型

public function answer() 
{ 
    return $this->hasMany('answers','user_id','question_id'); 
} 

應答模型

public function question() 
{ 
    return $this->belongsTo('questions','question_id'); 
} 

現在從用戶控制器

$user_profile = User::find($userid); 

電話,但只給了我們呃表格數據,不要回答問題和答案。

回答

0

我認爲你可以使用has-many-through關係。由於您正在使用雄辯,請嘗試this example

0

針對您的問題的解決方案是「EAGER LOADING」,讓我們來看看我們如何將它用於您的情況。

$user_profile = User::with('answer')->find($userid); 

這不會給你從該用戶的問題,原因是你缺少用戶和問題之間的關係。

上面說你可以得到答案,因爲每個答案都與問題的關係,你可以得到的問題,但不是這樣做的理想方式。

建議 你的關係和模型是不恰當的,可能是足夠的,你需要什麼,但您的應用程序增長,你會進入會帶來很多問題。

如果我會這樣做,我的關係會不同,包括數據庫結構。對於前:

用戶: ID,名稱,.....

問: ID,標題,...

答: ID,答案,...

UserQuestion:這應該是用戶&問題的透視表[USER_ID,question_id]

UserAnswer:這應該是用戶&回答[USER_ID,answer_id]的樞軸表

QuestionAnswer:這應該是問題&的數據透視表答案[question_id,answer_id]

您可以通過User_Question_Answer [user_id,question_id,answer_id]獲得這些數據透視表的不同場景,但它依賴於您的應用程序需求。