2014-10-06 40 views
4

我有一個用戶模型,每個用戶都有一個內部或外部類型。存儲在內部和外部用戶上的數據非常不同,因此存在單獨的UserInternal和UserExternal模型。Laravel有一個條件關係

我該如何定義這種關係? UserInternal和UserExternal表中有一個關鍵字'user_id',每個用戶在其中一個表中都有匹配的行。

當我檢索用戶數據時,它總是通過用戶模型,但是我想要擴展數據。

我該如何去做呢?我想這一點,但它並不總是工作(例如,如果我嘗試User::with('data') -> find(1)它不會工作,因爲$這還沒有加入

在用戶模式:

public function data() 
{ 
    if($this -> type === 'internal') 
    { 
     return $this -> hasOne('UserInternal'); 
    } 
    else 
    { 
     return $this -> hasOne('UserExternal'); 
    } 
} 

回答

1

嘗試負載的關係獲得用戶後:

$user = User::find(1); 

if(! is_null($user)) 
{ 
    $user->load('data'); 
} 
+1

是的 - 看起來這將是我要去的方式,只是想知道是否會有更先進的選擇! – 2014-10-07 08:10:17

+0

@Ryu_hayabusa你指的是什麼方法?如果我沒有錯,只是關係方法必須是camelCase。 – chester 2014-10-16 10:48:41

0

我不認爲你可以鏈find()Eloquent模型別的後

的發電機。反對的其他答案是:

User::with('data')->where('user_id', 1)->first(); 
+0

鏈接確實有效,但前提是沒有條件。所以,如果它總是返回第一個選項,它工作正常 – 2014-10-07 08:09:56

+0

阿好。謝謝,看起來像你找到你的答案無論如何:)。 – Bludock 2014-10-07 18:00:06