【问题标题】:Laravel Eloquent: Return Array key as the fields IDLaravel Eloquent:返回数组键作为字段 ID
【发布时间】:2015-01-08 01:26:21
【问题描述】:

当我通过 Laravel 的 Eloquent ORM 执行查询时,我想获取行 ID 作为数组结果键,当我想根据 ID(使用 array_key_exists)检查某些内容或进行一些查找时,这将使事情变得更容易(如果我需要结果数组中的特定条目)

有什么方法可以告诉 Eloquent 将键设置为字段 ID?

【问题讨论】:

标签: php laravel eloquent


【解决方案1】:

您有一个Support\Collection/Database\Eloquent\Collection,您可以使用lists('id') 方法返回集合中每个模型的ID 数组。

然后使用array_combine 将键映射到模型。其结果将是一个数组,其 id 映射到其相应的模型。

【讨论】:

    【解决方案2】:

    由于您拥有 Eloquent 集合(child classgeneric Collection class),因此您可以使用 getDictionary method$collection->getDictionary() 将为您提供一个由其主键作为键的 Category 对象的数组。

    如果您想要另一个 Collection 而不是原生 PHP 数组,您可以改用 $collection->keyBy($property)。看起来你的主键是category_id,所以$collection->keyBy('category_id')。您可以使用该方法对任意属性进行键控,包括您可能编写的任何 get 修改器。

    getDictionary 是 Eloquent Collection 扩展所独有的,keyBy 可用于所有 Laravel Collection 对象。请参阅Laravel 4.2 API docsLaravel 5.0 API docs

    【讨论】:

      【解决方案3】:

      如果你需要id作为key,那么依赖Collection:

      $collection = Model::all();
      
      $collection->getDictionary();
      
      // returns:
      array(
        1 => object(Model) ( ... ),
        2 => object(Model) ( ... ),
        ...
        idN => object(Model) ( ... )
      );
      

      否则,无论好坏,你都可以这样做:

      $keys = $collection->lists('columnName');
      
      $arrayOfModels = array_combine($keys, $collection->getDictionary);
      

      【讨论】:

        【解决方案4】:

        你可以这样做

        Model::all()->keyBy('category_id');
        

        干杯:)

        【讨论】:

        • 如果你在做一个自定义查询,你可以像这样使用它:Model::selectRaw(...)->where(...)->groupBy('field')- >get()->keyBy('field')->toArray();
        【解决方案5】:

        get() 输出上的pluck('label','id') 是您在 Laravel 5.8+ 中寻找的内容,它为您提供了一个集合,准备好成为toArray()ed

        例如:

        $options = \App\DataChoice::where([ 'field_id' => $dataField->id , 'active' => true ])->get()->pluck('label','id')->toArray();
        

        我遇到了类似的挑战 - 我想要一个 PHP 数组,以允许我为每个选择创建一个,其中 ' 的值是 id 自动递增列,显示的文本是值。

        【讨论】:

          猜你喜欢
          • 2018-10-21
          • 1970-01-01
          • 2016-11-22
          • 1970-01-01
          • 2021-06-03
          • 2013-10-09
          • 2018-12-02
          • 2020-05-24
          • 2016-03-31
          相关资源
          最近更新 更多