Php 该方法未找到正确的数据
我有一个收藏:Php 该方法未找到正确的数据,php,laravel,Php,Laravel,我有一个收藏: +items: Collection {#173 ▼ #items: array:1 [▼ "2" => {#164 ▼ +"name": "101 роза" +"price": 4999 +"is_sale": 0 +"sale_price": null +"sale_percent": null +"can_use_promocode": 1
+items: Collection {#173 ▼
#items: array:1 [▼
"2" => {#164 ▼
+"name": "101 роза"
+"price": 4999
+"is_sale": 0
+"sale_price": null
+"sale_percent": null
+"can_use_promocode": 1
+"qty": 6
}
]
}
然后,我尝试使用方法has()
检查购物车中是否已经存在此产品:
if ($this->items->has($productId)) {
$this->items->$productId->qty++;
}
但这是行不通的。尝试做:
dump($this->items->has($productId));
但我只得到了false
。我哪里出错了
我做$this->items->$productId->qty++对吗代码>,它会工作吗
UPD:
dump($this->items,$productId,$this->items->has($productId),$this->items->has(2))的输出代码>:
Collection {#172 ▼
#items: array:1 [▼
"2" => {#163 ▼
+"name": "101 rose"
+"price": 4999
+"is_sale": 0
+"sale_price": null
+"sale_percent": null
+"can_use_promocode": 1
+"qty": 1
}
]
}
"2"
false
false
如果有帮助的话:Laravel 5.2.45,我从这里获取数据(从数据库获取数据并保存在类变量中):
已查找一个键,您正在传入一个值。如果要查找匹配的项,可能需要使用where
或类似的方法。如果要查找键,则要传入值。如果要查找匹配项,可能需要使用where
或类似的方法。您可以将集合转换为数组,添加数据,然后将其转换回集合:
$array = $collection->toArray();
$array[$key]['qty']++;
$collection = collect($array);
或者,您可以使用和更新集合:
您可以将集合转换为数组,添加数据,然后将其转换回集合:
$array = $collection->toArray();
$array[$key]['qty']++;
$collection = collect($array);
或者,您可以使用和更新集合:
感谢您提供附加代码。这个问题是由您使用json引起的:您正在对json进行编码和解码,这是在创建一个对象数组,而不是一个关联数组
json\u decode
接受一个参数assoc
,该参数为“”,因此您需要传递此参数
替换此项:
$cart = json_decode($cart);
为此:
$cart = json_decode($cart, true);
感谢您提供附加代码。这个问题是由您使用json引起的:您正在对json进行编码和解码,这是在创建一个对象数组,而不是一个关联数组
json\u decode
接受一个参数assoc
,该参数为“”,因此您需要传递此参数
替换此项:
$cart = json_decode($cart);
为此:
$cart = json_decode($cart, true);
但是在我的例子中,([“2”=>[..)
,我需要用键而不是值来搜索。或者我错了?但是在我的例子中,([“2”=>[..)
,我需要用键而不是值来搜索。或者我错了?你已经问了3个关于集合的问题,你自己用tinker来测试它们吧…(php artisan tinker
)。如果你能在更短的时间内自己解决问题,那么你真的值得浪费时间写问题吗?@Kyslik我问了这个问题,只是因为我不知道哪里出了问题(我在所有情况下都遵循了文档)。例如,检查这个问题。有一个键“2”
,但方法有()
返回false。我应该在这里测试什么?这取决于您如何获得问题中缺少的“您的集合”,无论哪种方式,您都应该自己找出问题的答案,然后运行以获得答案,作为最后的手段。您确定productId
等于2
?集合和具有(2)
查找是正确的,因此问题一定是您的productId
变量有问题。请尝试将has($productId)
更改为has(2)
以确认这一点,然后dump($productId)
以查看值。@sam检查了它,我的$productId
是2
,我尝试进行转储($this->items->has('2'))
,它返回false
您已经问了3个关于集合的问题,只需使用tinker自己测试它们…(php artisan tinker
)。如果你能在更短的时间内自己解决问题,那么你真的值得浪费时间写问题吗?@Kyslik我问了这个问题,只是因为我不知道哪里出了问题(我在所有情况下都遵循了文档)。例如,检查这个问题。有一个键“2”
,但方法有()
返回false。我应该在这里测试什么?这取决于您如何获得问题中缺少的“您的集合”,无论哪种方式,您都应该自己找出问题的答案,然后运行以获得答案,作为最后的手段。您确定productId
等于2
?集合和具有(2)
查找是正确的,因此问题一定是您的productId
变量有问题。请尝试将has($productId)
更改为has(2)
以确认这一点,然后dump($productId)
以查看值。@sam检查了它,我的$productId
是2
,我尝试进行转储($this->items->has('2'))
,它返回false
谢谢!但我的问题是为什么方法has()
不返回true
?我得到了一个键为的项“2”
,但这不起作用:C@Alexxosipov键看起来像是字符串而不是整数,也许这就是问题所在。@Alexosipov您也不能这样做$this->items->productId->qty++;
,我认为这就是问题所在,我已经向您展示了如何修改数据,而不是使用$this->items->$productId->qty++;
。否,这是第二个问题,这并不重要。第一个问题是关于方法has()
和我的collection@Alexxosipov在您试图以任何方式修改集合之前,请先放置dump($this->items->has('2'))
。谢谢!但我的问题是为什么方法has()
不返回true
?我得到一个带有键“2”的项目
,但这不起作用:C@Alexxosipov键看起来像是字符串而不是整数,也许这就是问题所在。@Alexosipov您也不能这样做$this->items->productId->qty++;
,我认为这就是问题所在,我已经向您展示了如何修改数据,而不是使用$this->items->$productId->qty++;
。否,这是第二个问题,这并不重要。第一个问题是关于方法has()
和我的collection@Alexxosipov在您试图以任何方式修改集合之前,请将dump($this->items->has('2'))
放入。