2013-08-01 70 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