我发现我的集合的键是错误的,所以我开始调试代码。在这个过程中,我注意到如果我向集合传递超过2500个项目,它将丢失它们的键,否则,如果我传递少于2501个项目,它会保持正常。
限制为2500个项目
public function getProdutos($codigoconcentrador, $codigoempresa, $pluck)
{
$model_produtos = new Produto();
$query = $model_produtos->newQuery();
$query->where('codigoconcentrador', $codigoconcentrador)
->where('codigoempresa', $codigoempresa)
->where('status', 'A');
$query->limit(2500);
dd($query->pluck('nomeproduto', 'codigopro'));
if ($pluck) {
return $query->pluck('nomeproduto', 'codigopro');
} else {
return $query->get();
}
}
结果
Collection {#260 ▼
#items: array:2500 [▼
1 => "CIMENTO VOTORAN CP II Z 32 - 50 KG"
7 => "SOPA 250G - LEGUMES"
8 => "SOPA 250G - CARNE"
9 => "CIMENTO CIPLAN CP II Z 32 - 50 KG"
10 => "ARGAMASSA VOTORAN ACI"
11 => "ARGAMASSA VOTORAN ACII"
13 => "ARGAMASSA COLA BEM ACI "
14 => "ARGAMASSA COLA BEM ACII "
...
...
没有限制
public function getProdutos($codigoconcentrador, $codigoempresa, $pluck)
{
$model_produtos = new Produto();
$query = $model_produtos->newQuery();
$query->where('codigoconcentrador', $codigoconcentrador)
->where('codigoempresa', $codigoempresa)
->where('status', 'A');
// $query->limit(2500);
dd($query->pluck('nomeproduto', 'codigopro'));
if ($pluck) {
return $query->pluck('nomeproduto', 'codigopro');
} else {
return $query->get();
}
}
结果
Collection {#3809 ▼
#items: array:2875 [▼
0 => "CIMENTO VOTORAN CP II Z 32 - 50 KG"
1 => "SOPA 250G - LEGUMES"
2 => "SOPA 250G - CARNE"
3 => "CIMENTO CIPLAN CP II Z 32 - 50 KG"
4 => "ARGAMASSA VOTORAN ACI"
5 => "ARGAMASSA VOTORAN ACII"
6 => "ARGAMASSA COLA BEM ACI "
7 => "ARGAMASSA COLA BEM ACII "
8 => "REATOR 2 X 40 BIVOLT"
9 => "CHA VERDE SOLUVEL - LIMAO 200G - UND"
10 => "ROLDANA P/ POCO GANCHO 12CM. R.C.A."
...
...
更新
这个函数接收第二个参数$query->pluck('nomeproduto', 'codigopro')
,所以我调试了pluck函数,只有当它变成一个集合时才会丢失键。
vendor/laravel/framework/src/Illuminate/Support/Collection.php
public function pluck($value, $key = null)
{
dd(Arr::pluck($this->items, $value, $key)); // First Result
dd(new static(Arr::pluck($this->items, $value, $key))); // Second Result
// return new static(Arr::pluck($this->items, $value, $key));
}
Arr::pluck($this->items, $value, $key);
第二个结果:new static(Arr::pluck($this->items, $value, $key));
- SpaceDogCS