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