whe*_*ker 4 php laravel laravel-5 laravel-collection laravel-5.7
以下是转储的集合:
//$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}"
]
}
Run Code Online (Sandbox Code Playgroud)
这是错误:
{
"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": "->"
},
Run Code Online (Sandbox Code Playgroud)
这是上述错误中引用的第 174 行:
$diff = $collOne->diff($collTwo);
Run Code Online (Sandbox Code Playgroud)
文档看起来很简单:
diff 方法根据集合的值将集合与另一个集合或普通 PHP 数组进行比较。此方法将返回原始集合中不存在于给定集合中的值:
我在这里遗漏了一些明显的东西吗?
我怀疑当你打电话时mapWithKeys你没有返回一个Model实例。这就是导致错误的原因。Illuminate\Database\Eloquent\Collection必须是 Eloquent 模型的集合,但在本例中不是。
一种解决方法可能是在基础集合中调用 diff 而不是像这样调用 Eloquent 集合:
$diff = $collOne->toBase()->diff($collTwo->toBase());
Run Code Online (Sandbox Code Playgroud)
或者,当您调用 时mapWithKeys,在基本集合上调用它,如下所示:
$eloqCollection->toBase()->mapWithKeys(function($...) {...})对于这两个集合。然后你可以使用相同的代码:$diff = $collOne->diff($collTwo);来计算差异,因为现在$collOne和$collTwo都是Illuminate\Support\Collection
| 归档时间: |
|
| 查看次数: |
6818 次 |
| 最近记录: |