0

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

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

模型 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 错误。

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

$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'.

有任何想法吗?

4

1 回答 1

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;
于 2012-10-05T23:07:08.373 回答