【问题标题】:Relation error in yiiyii 中的关系错误
【发布时间】:2014-04-23 11:08:20
【问题描述】:

我是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'),returns UserSite->id 我需要它必须返回UserSite->User_id

请有人帮我解决这个问题..

【问题讨论】:

    标签: php mysql yii relational-database


    【解决方案1】:

    你们的关系颠倒了。每个User 可以有很多UserSites 或者你的关系应该是

    '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, ...) 子句指定它想要的行。

    【讨论】:

    • 当时我已经尝试过它的错误 CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'userSites.site_id' in 'where Clause'。执行的 SQL 语句为:SELECT t.id AS t0_c0, t.customer_id AS t0_c1, t.email AS t0_c2, name9. AS t0_c3, t.name AS t0_c4, t.company AS t0_c5, t.country AS t, @9876434351@, @98765 987654353@, t.expiry_date AS t0_c8 FROM user t WHERE (userSites.site_id=4) LIMIT 100
    猜你喜欢
    • 2011-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-14
    • 1970-01-01
    相关资源
    最近更新 更多