[英]Relation error in yii
我是yii
新手。 我有三种型号
Site(id,name)
User(id,name,..)
UserSite(id,user_id,site_id)
我需要的是在我选择用户需要的网站下拉菜单时属于该网站
用户模型中的关系为'userSites' => array(self::BELONGS_TO, 'UserSite', 'id'),
搜索功能的用户模型是
public function search($sid)
{
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('customer_id',$this->customer_id,true);
$criteria->compare('email',$this->email,true);
$criteria->compare('password',$this->password,true);
$criteria->compare('name',$this->name,true);
$criteria->compare('company',$this->company,true);
$criteria->compare('country',$this->country,true);
$criteria->compare('date_added',$this->date_added,true);
$criteria->compare('expiry_date',$this->expiry_date,true);
if($sid!=null)
{
$criteria->with = array('userSites');
$criteria->addCondition('userSites.site_id='.$sid);
}
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
在这里发生的事情是在显示用户(user.id=user_site.id)
但实际上我需要(user.id=user_site.user_id)
。
现在,此关系'userSites' => array(self::BELONGS_TO, 'UserSite', 'id'),
返回UserSite->id
,我需要返回UserSite->User_id
请有人帮我解决这个问题。
您的关系倒转了。 每个User
可以有多个UserSite
,这样您的关系才可以
'userSites' => array(self::HAS_MANY, 'UserSite', 'user_id')
为了在CActiveDataProvider
渴望加载关系,必须将CDbCriteria::together
设置为true
:
if($sid!=null){
$criteria->together = true;
...
有关此问题的说明, 请参见http://www.yiiframework.com/wiki/280/1-n-relations-sometimes-require-cdbcriteria-together/
但是,跟踪应用程序的查询表明,当CActiveDataProvider获取数据时,它处理1:n相关表的方法有所不同。 AR通过一个查询将所有那些1:1子表联接在一起,从父表和1:1相关的子表中获取数据。 1:n子表不属于此查询。 AR从具有后续查询的数据中获取数据,每个1:n子表查询一次,并使用WHERE PK IN(id1,id2,...)子句指定所需的行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.