Laravel 执行查询后,从eloquent集合中选择某些列
使用Laravel5.3,我有一个具有以下功能的模型Laravel 执行查询后,从eloquent集合中选择某些列,laravel,collections,Laravel,Collections,使用Laravel5.3,我有一个具有以下功能的模型 public function myData() { return $this->hasMany(MyData::class); } 在我的收藏中,我有以下几点 $my_data = MyModel->myData()->get(); 到目前为止一切都很好。如果我返回$my_data我会得到一个包含三个项目的有说服力的集合 不过,我现在需要的是创建该集合的副本,但只包含三个字段 我尝试了几种不同的方法,每种方法
public function myData() {
return $this->hasMany(MyData::class);
}
在我的收藏中,我有以下几点
$my_data = MyModel->myData()->get();
到目前为止一切都很好。如果我返回$my_data
我会得到一个包含三个项目的有说服力的集合
不过,我现在需要的是创建该集合的副本,但只包含三个字段
我尝试了几种不同的方法,每种方法都会返回一个错误。下面是我得到的最接近的一个数组,但它返回一个空数组——我假设是因为字段位于集合对象的一个层次之上
$new_collection = $my_data->only(['field_1', 'field_2', 'field_3']);
创建包含所有三个项的新集合的正确方法是什么,每个项仅包含三个选定字段
感谢您的帮助您可以使用:
这将返回一个新的集合
,其中包含您想要的值。据我所知,没有任何其他方法可以满足您的需要,因此以这种方式迭代每个项并选择字段是为数不多的解决方案之一
使用map
而不是标准的foreach
循环的优点是,当使用map
时,它会返回集合的新实例
编辑:
在对此进行一些思考和研究之后,您将遇到的问题是集合中的所有值都不再是任何内容的实例。如果您不介意这种效果,一种更漂亮、更快的方法是:
$slimmed_down = $collection->toArray()->only(['field_1', 'field_2', 'field_3']);
这基本上具有相同的结果。您不能仅对toArray()的结果调用。因为它是一个数组,而不是集合。
$slimmed_down = $collection->toArray()->only(['field_1', 'field_2', 'field_3']);