以下是转储的收藏集:
//$collOne
Illuminate\Database\Eloquent\Collection {#3386
#items: array:6 [
4807 => "{"color_id":7,"size_id":4,"pack_id":null}"
4808 => "{"color_id":7,"size_id":2,"pack_id":null}"
4809 => "{"color_id":7,"size_id":6,"pack_id":null}"
4840 => "{"color_id":44,"size_id":4,"pack_id":null}"
4841 => "{"color_id":44,"size_id":6,"pack_id":null}"
4842 => "{"color_id":44,"size_id":2,"pack_id":null}"
]
}
//$collTwo
Illuminate\Database\Eloquent\Collection {#3403
#items: array:5 [
430 => "{"color_id":7,"size_id":4,"pack_id":null}"
431 => "{"color_id":7,"size_id":2,"pack_id":null}"
433 => "{"color_id":44,"size_id":4,"pack_id":null}"
434 => "{"color_id":44,"size_id":6,"pack_id":null}"
435 => "{"color_id":44,"size_id":2,"pack_id":null}"
]
}
这是错误:
{
"message": "Call to a member function getKey() on string",
"exception": "Symfony\\Component\\Debug\\Exception\\FatalThrowableError",
"file": "[obfuscated]/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Collection.php",
"line": 281,
"trace": [
{
"file": "[obfuscated].php",
"line": 174,
"function": "diff",
"class": "Illuminate\\Database\\Eloquent\\Collection",
"type": "->"
},
这是上面的错误中引用的第174行:
$diff = $collOne->diff($collTwo);
文档似乎非常简单:
diff方法将集合与另一个集合进行比较,或者 基于其值的纯PHP数组。此方法将返回 给定中不存在的原始集合中的值 集合:
我在这里缺少明显的东西吗?
答案 0 :(得分:2)
我怀疑当您致电mapWithKeys
时,您没有返回Model
实例。这就是导致错误的原因。 Illuminate\Database\Eloquent\Collection
必须是口才模型的集合,但在这种情况下不是。
一种解决方法可能是在基本集合中而不是在Eloquent集合中调用diff:
$diff = $collOne->toBase()->diff($collTwo->toBase());
或者,当您调用mapWithKeys
时,也可以像这样在基本集合上调用它:
$eloqCollection->toBase()->mapWithKeys(function($...) {...})
(两个集合)。然后,您可以使用相同的代码:$diff = $collOne->diff($collTwo);
来计算差异,因为现在$collOne
和$collTwo
都是Illuminate\Support\Collection