1

我看到了使用 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

谢谢

乔恩。

4

2 回答 2

1

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

在我的用户模型中,我需要

class User extends Eloquent implements UserInterface, RemindableInterface {

    public function socialProvider() { 
        return $this->belongsTo('SocialProvider','SocialProviderID'); 
     }
于 2013-08-14T09:00:43.377 回答
0

嗯...关系使用有问题的模型的 ID ....而且您没有在任何地方引用实际用户...

您需要在社交提供者表中有一个列来存储user_id

然后在你的函数中......

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

和...

public function user() { return $this->belongsTo('User'); }
于 2013-08-01T15:33:44.543 回答