gpt4 book ai didi

php - 多个连接在 Yii2 的 where 条件下表现不同

转载 作者:可可西里 更新时间:2023-11-01 00:58:47 25 4
gpt4 key购买 nike

$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 需要两个操作数,而如果我提供相同的 Material 模型,它工作正常但在产品模型中它不工作。

此外,我想将产品添加到购物车产品及其插件(我将它们称为物质对象)。如果我将 $query3 重写为

$query3->where(['in','Material.MaterialId', ['ID1', 'ID2']])->joinWith(['objectName']);

它以它应该的方式工作。此外,如果我使用 ArrayHelper::toArray($value),它会返回 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

关于php - 多个连接在 Yii2 的 where 条件下表现不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33623342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com