Laravel Eloquent Pluck不丢失钥匙

时间:2017-02-20 22:17:39

标签: php laravel eloquent

我在Laravel中有以下集合:

 ["TheNumbers":[{"episodeID":16818,"episodeNumber":100,"created_at":null,"updated_at":null},{"episodeID":16818,"episodeNumber":210,"created_at":"2017-02-20 21:30:38","updated_at":"2017-02-20 21:30:38"}]

如果我运行以下代码:

$TheEpisode->TheNumbers->pluck('episodeNumber');

我会得到以下结果:

[100,210]

我想保留每个号码的密钥,我该如何实现?

编辑:预期结果:

这是我的预期结果:

[{"episodeNumber":100},{"episodeNumber":210}]

PHILIS PETERS(改进)

TheEpisode->TheNumbers->reduce(function ($result, $episode) {
          $episodeData = (collect())->put('episodeNumber', $episode['episodeNumber']);
          $result[] = $episodeData;
          return $result;
        }));

7 个答案:

答案 0 :(得分:22)

Pluck可以使用两个参数。第二个是值可以键入的值。

你应该可以这样做:

$TheEpisode->TheNumbers->pluck('episodeNumber', 'episodeID');

希望这有帮助!

答案 1 :(得分:5)

尝试这样的事情,它应该使用map ...

return $TheEpisode->TheNumbers->map(function ($episode) {
    return ['episodeNumber' => $episode['episodeNumber']];
});

答案 2 :(得分:3)

这可以简单地通过向pluck传递第二个参数来实现。从文档中:

  

您还可以指定希望如何生成结果集合   键控:

$plucked = $collection->pluck('name', 'product_id');

$plucked->all();

// ['prod-100' => 'Desk', 'prod-200' => 'Chair']

答案 3 :(得分:2)

<div id="detail"></div>

这将只留下两个第一个键值对。值得记住的是:

  

忘记不返回新修改的集合;它修改了它被调用的集合。

Laravel docs

这应该可以正常运作:

$collection->forget(['created_at', 'updated_at]);

答案 4 :(得分:0)

尝试使用

$TheEpisode->TheNumbers->lists('episodeNumber');

密钥将保留。

答案 5 :(得分:0)

尝试使用<div class="alingFloat"> <div class="scheduleText"> Fac </div> <div class="scheduleText"> Type </div> </div> <div class="alingFloat"> <div class="scheduleText"> Curse </div> <div class="scheduleText"> Group </div> </div> ,如下所示:

mapWithKeys

我假设你想要这样的结果:

$TheEpisode->TheNumbers->mapWithKeys(function ($theNumber) { return ['episodeNumber' => $theNumber['episodeNumber'] });

答案 6 :(得分:0)

为了更新Laravel,我尝试了所有步骤,但发现了

return Model::get(['name','id'])

使用键=>值将减少结果。