Laravel集合更改键名问题

3
我发现我的集合的键是错误的,所以我开始调试代码。在这个过程中,我注意到如果我向集合传递超过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));
    }
2个回答

1
当您将一个key作为第二个参数传递时,将获得第一个结果:
pluck('nomeproduto', 'codigopro')

当您没有通过它时,您将得到第二个。

pluck('nomeproduto')

所以,请仔细检查代码。


$query .= $query->limit(2500); 的含义是将查询结果限制在 2500 条内。 - Abdulla Nilam
不,这个函数接收第二个参数,所以我调试了pluck函数,只有当它变成一个集合时才会丢失键。第一个结果: Arr::pluck($this->items, $value, $key); 第二个结果: new static(Arr::pluck($this->items, $value, $key)); - SpaceDogCS

1
< p > plug 方法搜索具有该名称的列,并将其用作每个元素的新键...如果您只想获取每个元素的两列,则可以使用 $collection->only('aa', 'bb') 。此外,出于许多原因,您应该使用分页...一个由2500多个元素组成的数组是疯狂的。


我需要它成为关键原因是一个选择输入,我知道这很疯狂 kkkkk,我正在开发一个输入框,当用户输入时,使用ajax搜索产品,但即使很疯狂,它也不应该失去关键性,对吧? - SpaceDogCS

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接