【问题标题】:Process Collection through Map function通过 Map 功能处理收集
【发布时间】:2017-06-11 09:21:39
【问题描述】:

我从 Laravel 的查询中得到一个集合。

其实我就是这样处理集合的:

foreach ($cts as $ct) {
        $array[$ct->id] = $ct->category->name;

    }

它输出这个:

array:2 [▼
1158 => "Junior por Equipo"
1160 => "Varonil por Equipo"
]

现在,我想在 muy 集合上使用 map() 函数,因为我更喜欢它:

MyModel::get()
        ->get()
        ->map(function ($item, $value){
            return [ $item->id => $item->category->name ];
        })->toArray();

但现在,我明白了:

    array:2 [▼
  0 => array:1 [▼
    1158 => "Junior por Equipo"
  ]
  1 => array:1 [▼
    1160 => "Varonil por Equipo"
  ]
]

我应该怎么做才能像第一种情况一样输出它?

【问题讨论】:

    标签: laravel collections


    【解决方案1】:

    您不必映射集合,只需使用MyModel::lists('name', 'id' ) ;

    【讨论】:

    • 好的,但是我应该如何将 id 解析为 name(名称在另一个表中)。我会有 MyModel::get()->pluck('category_id','id') 但不是 MyModel::get()->pluck('category_name,'id')
    • id 没问题,但是我应该如何使用另一个字段在另一个表中,所以我不能再使用 pluck / lists :(
    • 试试这个MyModel::with('relationship')->lists('related_table.id', 'mymodel_table. id' )
    【解决方案2】:

    有一个收集方法。 pluck()和雄辩的lists()

    不,它更喜欢使用 pluck 来获取一些列。之前使用了 lists()。

    https://laravel.com/docs/5.3/collections#method-pluck

    如文件所述

    pluck 方法只检索给定键的所有值

    所以它会是这样的。

    Model::get()->pluck('name','id);
    

    如果你想得到一个数组而不是一个集合,你可以对结果执行 toArray()。

    【讨论】:

    • 不工作...在我的情况下,我可以用 id 来做,但另一个字段是关系,所以它在模型之外,所以 pluck 不起作用
    猜你喜欢
    • 2014-10-18
    • 2015-04-14
    • 2020-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多