gpt4 book ai didi

laravel - 在查询执行后从 Eloquent 集合中选择某些列

转载 作者:行者123 更新时间:2023-12-05 08:42:06 27 4
gpt4 key购买 nike

使用 Laravel 5.3,我有一个具有以下功能的模型

public function myData() {
return $this->hasMany(MyData::class);
}

在我的收藏中,我有以下内容

$my_data = MyModel->myData()->get(); 

到目前为止一切都很好。如果我返回 $my_data,我会得到一个包含三个项目的 eloquent 集合。

不过,我现在需要的是创建该集合的副本,但只包含三个字段。

我尝试了几种不同的方法,每一种都返回错误。以下是我得到的最接近的,但这会返回一个空数组 - 我假设是因为字段位于比集合对象深一层。

$new_collection = $my_data->only(['field_1', 'field_2', 'field_3']);

创建包含所有三个项目且每个项目仅包含三个选定字段的新集合的正确方法是什么?

谢谢你的帮助

最佳答案

你可以使用 map :

$slimmed_down = $collection->map(function ($item, $key) {
return [
'field_1' => $item->field_1,
'field_2' => $item->field_2,
'field_3' => $item->field_3
];
});

这将返回一个新的 Collection,其中只包含您想要的值。据我所知,没有任何其他方法可以满足您的需求,因此迭代每个项目并以这种方式选择字段是为数不多的解决方案之一。

使用 map 而不是标准的 foreach 循环的优点是,当您使用 map 时,它会返回 的新实例收藏.

编辑:

在对此进行一些思考和研究之后,您将产生的问题是 Collection 中的所有值不再是任何实例。如果你不介意这种效果,一个更漂亮和更快的方法是这样做:

$slimmed_down = $collection->toArray()->only(['field_1', 'field_2', 'field_3']);

这基本上有相同的结果。

关于laravel - 在查询执行后从 Eloquent 集合中选择某些列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44759525/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com