Laravel系列改变了关键问题

时间:2018-01-10 17:18:17

标签: php arrays laravel collections

我发现我的收藏是错误的键,所以我开始调试代码。这样做我注意到,如果我将数组中超过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函数,就在它成为集合时它丢失了密钥

供应商/ laravel /框架/ SRC /照亮/支持/ 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 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

当您将密钥作为第二个参数传递时,您将获得第一个结果:

function check() {
    document.getElementById("testout").innerHTML = "Verified";
    document.getElementById("checkbit").innerHTML = "1";
}

function store() {
  if (checkbit.innerHTML == "1") {
    //some code
  }
}

当你没有通过它时,你得到了第二个:

pluck('nomeproduto', 'codigopro')

所以,请仔细检查代码。