多个连接在 Yii2 的 where 条件下表现不同
Multiple joins behaving differently in where condition in Yii2
$materials = Material::find()
->where(['in', 'Material.MaterialId', $value])
->joinWith(['objectName'])
->all();
$product = Product::find()
->where(['Product.productId' => $id, 'Product.ModelId' => $mid])
->joinWith(['product' => function ($query) {
$query->joinWith([
'objectName',
'contents' => function ($query2) {
$query2->joinWith(['material' => function ($query3) {
$query3->where(['in', 'Material.MaterialId', $value])
->joinWith(['objectName']);
}]);
},
])
->all();
}])
->one();
我运行陷入了错误。 $query3
给出一个错误 IN
期望两个 ope运行ds 而如果我提供相同的 material 模型它工作正常但在产品模型中它不工作。
此外,我想将产品添加到购物车产品及其插件(我在 material 对象中调用它们)。如果我将 $query3
重写为
$query3->where(['in','Material.MaterialId', ['ID1', 'ID2']])->joinWith(['objectName']);
它以它应该的方式工作。此外,如果我使用 ArrayHelper::toArray($value)
它 returns 我 null
,可能是因为 $value
数组现在是子数组。我确定 $value
是数组。
有什么建议吗?
变量$value
不存在于引用它的闭包范围内。每个闭包都是一个独立的范围,只能使用全局变量或其父范围中的变量。因此 $value
必须被作为它所使用的闭包的父级的每个闭包连续继承。这可以通过 use
:
完成
$product = Product::find()
->where(['Product.productId' => $id, 'Product.ModelId' => $mid])
->joinWith(['product' => function ($query) use ($value) {
$query->joinWith([
'objectName',
'contents' => function ($query2) use ($value) {
$query2->joinWith(['material' => function ($query3) use ($value) {
同样适用于$query2
和$query3
。
$materials = Material::find()
->where(['in', 'Material.MaterialId', $value])
->joinWith(['objectName'])
->all();
$product = Product::find()
->where(['Product.productId' => $id, 'Product.ModelId' => $mid])
->joinWith(['product' => function ($query) {
$query->joinWith([
'objectName',
'contents' => function ($query2) {
$query2->joinWith(['material' => function ($query3) {
$query3->where(['in', 'Material.MaterialId', $value])
->joinWith(['objectName']);
}]);
},
])
->all();
}])
->one();
我运行陷入了错误。 $query3
给出一个错误 IN
期望两个 ope运行ds 而如果我提供相同的 material 模型它工作正常但在产品模型中它不工作。
此外,我想将产品添加到购物车产品及其插件(我在 material 对象中调用它们)。如果我将 $query3
重写为
$query3->where(['in','Material.MaterialId', ['ID1', 'ID2']])->joinWith(['objectName']);
它以它应该的方式工作。此外,如果我使用 ArrayHelper::toArray($value)
它 returns 我 null
,可能是因为 $value
数组现在是子数组。我确定 $value
是数组。
有什么建议吗?
变量$value
不存在于引用它的闭包范围内。每个闭包都是一个独立的范围,只能使用全局变量或其父范围中的变量。因此 $value
必须被作为它所使用的闭包的父级的每个闭包连续继承。这可以通过 use
:
$product = Product::find()
->where(['Product.productId' => $id, 'Product.ModelId' => $mid])
->joinWith(['product' => function ($query) use ($value) {
$query->joinWith([
'objectName',
'contents' => function ($query2) use ($value) {
$query2->joinWith(['material' => function ($query3) use ($value) {
同样适用于$query2
和$query3
。