Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 构建';和';yii2中的查询_Php_Mysql_Yii2 - Fatal编程技术网

Php 构建';和';yii2中的查询

Php 构建';和';yii2中的查询,php,mysql,yii2,Php,Mysql,Yii2,您好,我正在尝试找出所使用的方法/方式,以便在代码中构建“AND”查询,因为我怀疑我现在使用的查询使用的是“OR”查询,请参见下面的代码 我认为这是构建“或”查询: ActiveSubject::find()->where(['clientid' => $clientid, 'subjectid' => $subjects['subjectid'],]); 我在互联网上搜索过,人们建议使用和where() 但是仍

您好,我正在尝试找出所使用的方法/方式,以便在代码中构建“AND”查询,因为我怀疑我现在使用的查询使用的是“OR”查询,请参见下面的代码

我认为这是构建“或”查询:

 ActiveSubject::find()->where(['clientid' => $clientid,
                               'subjectid' => $subjects['subjectid'],]);
我在互联网上搜索过,人们建议使用
和where()

但是仍然怀疑它仍然在使用'OR',因为即使没有相关的subjectid,输出仍然使用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模型中创建一个返回布尔值的函数,这将更有意义。

您似乎希望使用和查询

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

$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']]);
此外,您还可以尝试以下代码

$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']]);

第一个使用AND,和第二个一样。如果您对生成的SQL不确定,请检查调试器输出或调用类似以下内容:

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

您可以启用调试工具栏并检查从那里运行的查询。无需在那里添加
”和“
”。它只对数组起作用,我知道。它使用和。问题不在where()上,而在DB数据上。我已经修改了我的代码,请参阅编辑以获取更多参考。确实,查询正在使用“AND”查询。我忘了在问题中包含一些内容,因为我认为这并不重要,但我认为可以将查询用作if语句中的参数。请看上面的代码。它没有任何意义-如果那里的
条件返回ActiveQuery的实例。啊,是的,我意识到了。如果我在活动主题本身中创建一个返回布尔值的函数呢?因为这是我的if函数目标?这会更有意义,但与你的
问题无关。是的,我的目标是我这边的if函数,但我认为它不起作用的原因是因为查询没有实现布尔值,但是你说它实际上返回了ActiveQuery的一个实例,我意识到我错了。