我看到了使用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
由于
乔恩。
答案 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'); }