在 Yii2 中,您可以向查询添加子句,例如:
Product::find()
->where(['name' => 'MyProd'])
->andWhere(['type' => 'Toy'])
->orWhere(['category' => 'MyCat'])
->andWhere(['location' => 'MyLoc'])
这如何解释?它是否找到了
的产品?或
它是否找到以下产品:
和
和
完全是另外一回事吗?对于如何解释此类“逻辑上不明确”的查询,是否存在可以轻松描述的一般规则?
您的两种解释都不正确。
正确的解释是它找到的产品:
1. Have location "MyLoc"
and
2.1. Have category "MyCat"
or
2.2. Have name "MyProd" and type "Type"
这是因为当调用
andWhere()
和 orWhere()
方法时,它们会采用现有条件并使用 and/or 将新条件添加到现有条件。
因此,如果您将方法调用重写为单个复杂数组条件,您将得到:
[
'and',
[
'or',
[
'and',
['name' => 'MyProd'],
['type' => 'Toy'],
],
['category' => 'MyCat'],
],
['location' => 'MyLoc'],
]
翻译成MySQL条件你会得到:
((name = "MyProd" AND type = "Toy") OR category = 'MyCat') AND location = 'MyLoc'