
[英]How can I get one record from related model by specific value having HAS_MANY relation
[英]How to specify value in model relation keys?
我有表user
和profile
,一个用户最多有一个profile,并且由profile中的user_id和表名指定。 我在那里不使用外键。
之所以这样做,是因为我还有其他一些表,例如company
,也使用表profile
,所以引用由related_id =相关表的主键和related =表名指定
profile
relation_id
relation
我要实现的是将模型关系设置为等于字符串用户,因此不要在那里使用键,而要使用值。
user.php的
public function getProfile()
{
return $this->hasOne(Profile::className(),
['relation_id' => 'user_id', 'relation' => User::tableName()]);
}
错误我得到:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user.user' in 'on clause'
The SQL being executed was:
SELECT COUNT(*) FROM `user_login`
LEFT JOIN `user` ON `user_login`.`user_id` = `user`.`user_id`
LEFT JOIN `profile` ON `user`.`user_id` = `profile`.`relation_id`
AND `user`.`user` = `profile`.`relation`
它用于生成GridView,因此sql首先在计数上失败,但是select *
错误相同
我想实现的SQL :
SELECT * FROM `user_login`
LEFT JOIN `user` ON `user_login`.`user_id` = `user`.`user_id`
LEFT JOIN `profile` ON `user`.`user_id` = `profile`.`relation_id`
AND `profile`.`relation` = 'user'
所以问题是,如何在模型关系键中指定值?
如果您的用户与个人资料具有hasOne关系,则应仅使用
public function getProfile()
{
return $this->hasOne(Profile::className(),
['relation_id' => 'user_id']);
}
如果您需要按条件使用
public function getProfile()
{
return $this->hasOne(Profile::className(),
['relation_id' => 'user_id'])->andOnCondition(['relation' => User::tableName()]);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.