繁体   English   中英

如何在模型关系键中指定值?

[英]How to specify value in model relation keys?

我有表userprofile ,一个用户最多有一个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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM