Yii findByAttribute()函数与WITH()关系查询

时间:2017-03-31 06:00:42

标签: php mysql yii

我有findByAttributes()功能与userRemoteIdentities模型

的关系
$record = User::model()->with('userRemoteIdentities')->findByAttributes(
                        array('email' => $remoteProfile->email),
                        array(
                            'condition' =>'provider = :provider AND identifier = :identifier',
                            'params'=>array(':provider'=> strtolower($_GET['provider']), ':identifier'=> $remoteProfile->identifier)
                        )
                    );

问题是它使用AND

查询两个表
 WHERE (`t`.`email`=:yp0 AND (provider = :provider AND identifier = :identifier)

我如何才能使用这样的OR

WHERE (`t`.`email`=:yp0 OR (provider = :provider AND identifier = :identifier))

或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

在addColumnCondition中使用第二个和第三个参数

在模型中创建函数

 public function yourFunctionName($provider, $remoteProfile){
          $criteria = new CDbCriteria;
          $criteria->with = 'userRemoteIdentities';
          $criteria->addColumnCondition(['email' => $remoteProfile->email]);
          $criteria->addColumnCondition(['provider' => strtolower($provider), 'identifier' => $remoteProfile->identifier], 'AND', 'OR');
          return $this->findAll($criteria);
   }

呼叫

$record = User::model()->yourFunctionName($_GET['provider'], $remoteProfile);

P.S。我使用短数组语法。