0

カスタムメイドの関数を使用してデータベースから特定のデータを検索する際に問題が発生しました。

TableA(id、....)とTableB(id、tablea_id、userid、...)があります

モデルTableAには、次の関係コードがあります。

'relation_name' => array(self :: HAS_MANY、'TableB'、'tablea_id')

TableAをクエリするカスタムメイドの関数を作成し、TableBデータの特定のユーザーIDを含むTableAに存在する結果を取得する必要があります。また、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とConditionの代わりに):

$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 に答える