Yii2 中解释“逻辑上不明确”查询的规则是什么?

问题描述 投票:0回答:1

在 Yii2 中,您可以向查询添加子句,例如:

Product::find()
->where(['name' => 'MyProd'])
->andWhere(['type' => 'Toy'])
->orWhere(['category' => 'MyCat'])
->andWhere(['location' => 'MyLoc'])

这如何解释?它是否找到了

的产品?
  1. 称为“MyProd”并且类型为“Toy”

  1. 位于“MyCat”类别中且位置为“MyLoc” ?

它是否找到以下产品:

  1. 被称为“我的产品”

  1. 类型为“玩具”或类别为“MyCat”

  1. 有位置“MyLoc”吗?

完全是另外一回事吗?对于如何解释此类“逻辑上不明确”的查询,是否存在可以轻松描述的一般规则?

php yii2
1个回答
0
投票

您的两种解释都不正确。

正确的解释是它找到的产品:

 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'
© www.soinside.com 2019 - 2024. All rights reserved.