在yii 2

时间:2016-08-22 09:19:28

标签: php mysql yii2

你好我试图找出使用什么方法/方法,以便我可以在我的代码中构建一个'AND'查询,因为我怀疑我一直在使用的查询现在使用'OR'查询查看代码下方。

我认为这是构建'OR'查询:

 ActiveSubject::find()->where(['clientid' => $clientid,
                               'subjectid' => $subjects['subjectid'],]);

我在互联网上搜索过,人们建议使用andWhere()

ActiveSubject::find()->select(['clientid', 'subjectid'])
                     ->andWhere(['clientid' => $_user,])
                     ->andWhere(['subjectid' => $subjects['subjectid'],]);

但是仍然怀疑它仍在使用'OR',因为即使没有相关的主题,输出仍然会使所有行都具有clientid。你能帮我找出在yii 2中构建'WHERE'查询的正确方法吗?

编辑1:

我这样做:

  <?php if(ActiveSubject::find()->where(['clientid' => $_user,
                         'subjectid' => $subjects['subjectid'],]))://if true? ?>

<!--do this-->

<?php else: ?>

<!--do this-->

<?php endif; ?>

但是,当查询失败时,它没有执行else:

编辑2

我的目标是我的if函数,但我认为它不起作用的原因是因为查询它没有实现布尔值但是它实际上是返回一个ActiveQuery实例而我意识到我错了。因此,如果我在ActiveSubject模型中创建一个返回布尔值的函数,那将更有意义。

2 个答案:

答案 0 :(得分:1)

第一个使用AND,它与第二个相同。如果您不确定生成的SQL,请检查调试器输出或调用类似:

echo ActiveSubject::find()
    ->where([
        'clientid'  => $clientid,
        'subjectid' => $subjects['subjectid']
    ])
    ->createCommand()
    ->sql;

答案 1 :(得分:0)

您似乎想使用AND查询。

您可以尝试使用以下代码打印查询来调试查询。

$query = ActiveSubject::find()->where(['clientid' => $clientid,
                               'subjectid' => $subjects['subjectid']]);

var_dump($query->prepare(Yii::$app->db->queryBuilder)->createCommand()->rawSql);

此外,您可以尝试使用以下代码。

ActiveSubject::find()
->andWhere('clientid = :clientid', [':clientid' => $clientid])
->andWhere('subjectid = :subjectid', [':subjectid' => $subjects['subjectid']]);