我在使用自定义函数搜索数据库中的特定数据时遇到了一些问题。
我有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'.
有什么想法吗?
答案 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;