雄辩的ORM关系一对一或一对多?

时间:2013-08-01 15:28:15

标签: laravel laravel-4 eloquent

我看到了使用Eloquent的强大功能,但尚未在我的项目中充分利用它。有两个表我想实现这个目标:

//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

由于

乔恩。

2 个答案:

答案 0 :(得分:1)

啊,我通过一些调试弄清楚了。我错误地指定了关系。

在我的用户模型中我需要

class User extends Eloquent implements UserInterface, RemindableInterface {

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

答案 1 :(得分:0)

嗯......关系会使用相关模型的ID ....而你并没有在任何地方引用实际用户......

您需要在存储user_id

的社交提供程序表中包含一个列

然后在你的功能......

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

和...

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