2013-08-01 72 views
1

我看到了使用雄辯的力量,但尚未在我的項目中很好地使用它。隨着兩個表我想實現這一點:一對一或一對多雄辯的ORM關係?

//output - LinkedIn 
echo User::find(42)->SocialProvider->Name 

我有一個用戶表,我有一個SocialProvider表,社交網站與他們的名字和API密鑰信息的列表。

我用戶表中的記錄42有一個'SocialProviderID'列,其中包含SocialProvider表中LinkedIn記錄的ID。

我已經定義模型類的關係如下

class User extends BaseModel implements UserInterface, RemindableInterface { 

/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'dbo_RegisteredUser'; 
    protected $primaryKey = "UserID"; 

    public function SocialProvider() { return $this->hasOne('SocialProvider','id'); } 

class SocialProvider extends Eloquent { 

/** 
* The database table used by the model. 
* 
* @var string 
*/ 
protected $table = 'dbo_SocialProvider'; 

public function user() { return $this->belongsTo('User','SocialProviderID'); } 

但查詢和結果都沒有執行,因爲我想。

有沒有人有想法?

我使用的是MSSQL,但在我比較熟悉MYSQL,我想這個ORM方案執行加入這樣的:

SELECT * FROM dbo_RegisteredUser 
LEFT JOIN (dbo_SocialProvider) 
      ON (dboRegisteredUser.SocialProviderID=dbo_SocialProvider.id) 
WHERE dbo_RegisteredUser.UserID=42 

感謝

喬恩。

回答

1

啊我想通了一下調試。我錯誤地指定了關係。

在我的用戶模型,我需要

class User extends Eloquent implements UserInterface, RemindableInterface { 

    public function socialProvider() { 
     return $this->belongsTo('SocialProvider','SocialProviderID'); 
    } 
0

嗯......關係,使用有問題的模型的ID ....和你沒有任何地方引用實際的用戶...

您必須對社會提供表collumn那存儲user_id

然後在你的函數...

public function SocialProvider() { return $this->hasOne('SocialProvider','user_id'); } 

和...

public function user() { return $this->belongsTo('User'); } 
+0

嗯,我想也許這個問題的原因是,我沒有正確定義的關係。每個用戶只有一個社交提供者(LinkedIn,Facebook),因此外鍵約束是user.SocialProviderID,並且是直接映射到SocialProvider.id。因此,SocialProvider應該與用戶沒有關係。只有用戶應該引用一個社會提供者(用user.SocialProviderID) – HowApped

+0

那麼我看到的第一件事情就是蝙蝠,你是不是擴展了雄辯.....在第一堂課....你'只是擴展BaseModel .....但我來自Laravel3,所以它可能完全在L4中有差異。 – KyleK

+0

是的,這是一個有效的點。但是從基礎模型擴展雄辯。如果我直接擴展雄辯,我仍然會得到一個空洞的結果。 thx雖然.. – HowApped