在标准上使用现有关系HAS-MANY

时间:2012-10-03 15:21:16

标签: php mysql yii

我在使用自定义函数搜索数据库中的特定数据时遇到了一些问题。

我有TableA(id,....)和TableB(id,tablea_id,userid,...)

Model TableA具有以下关系代码:

'relation_name'=>数组(self :: HAS_MANY,'TableB','tablea_id')

我需要创建一个自定义函数来查询TableA,并向我提供TableA上包含TableB数据上某个用户ID的结果,TableB也与tablea_id字段中的TableA相关。

我使用此代码找到了解决问题的方法:

        public function findABCD($user_id)
    {
              $criteria=new CDbCriteria;
              $criteria->join = 'left join TableB on t.id=TableB.tablea_id';
              $criteria->condition = "TableB.userid = ".$user_id;
              return new CActiveDataProvider($this, array(
                      'criteria'=>$criteria,
              ));
    } 

这有效,但我没有利用我之前创建的关系。 我需要使用什么想法?

我测试了很多东西,但是我收到了SQL错误。

这是我之前测试的(而不是条件Join和条件):

$criteria->with=array('relation_name');
$criteria->condition = "relation_name.userid= ".$user_id;
//this does not work as well
//$criteria->condition = "TableB.userid= ".$user_id;

错误是这样的:

SQL: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'relation_name.userid' in 'where clause'.

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我使用ActiveRecord查询进行此类连接,不确定它是否适用于CActiveDataProvider:

$criteria->with = array(
    'relation_name' => array(
        'joinType' => 'INNER JOIN',
        'on'       => 'user_id = :user_id',
        'params'   => array( 'user_id' => $userId )
    )
);

$criteria->together = true;