如何在Laravel中自定义对象集合

时间:2019-04-18 02:31:03

标签: php mysql laravel laravel-collection

我想从数据库中获取行,将它们转换为数组,然后添加一个自定义行,这样我就可以将整个内容传递给视图(Blade文件)。我尝试使用->push(),但似乎无法获得匹配的数组格式。下面的代码示例获取包含用户ID,名称和位置的行。

$profiles = \App\Profiles::orderBy('created_at', 'DESC')->get();

在这里,我想将“距离”附加到集合中的每个条目上。我希望从数据库中获取自定义信息,以便可以将其无缝传递到视图(刀片文件)。

4 个答案:

答案 0 :(得分:0)

$profiles是一个雄辩的集合,而不是数组。

$profiles = Profiles::latest()->get();

foreach ($profiles as $profile) {
   $profile->distance = 'your value';
}

return view('profile', compact('profiles');

答案 1 :(得分:0)

您可以遍历数组并按如下所示插入数据:

$profiles = \App\Profiles::orderBy('created_at', 'DESC')->get();

foreach ($profiles as &$profile) { // loop by reference so it will update current array
   $profile->distance = "Your Value";
}

然后,您可以将此数组传递给视图。希望对您有帮助。

答案 2 :(得分:0)

您得到一个Collection实例,那么为什么不使用它的一种有用方法呢?在这种情况下,Map()

  

map()

     

map方法遍历集合并将每个值传递给给定的回调。回调可以自由修改   项并返回它,从而形成一个新的修改项集合:

$collection = collect([1, 2, 3, 4, 5]);

$multiplied = $collection->map(function ($item, $key) {
    return $item * 2;
});

$multiplied->all();

// [2, 4, 6, 8, 10]

所以在您的情况下:

$profiles = \App\Profiles::orderBy('created_at', 'DESC')->get();

$profiles->map(function ($profile) {
    $profile->distance = 'your value';

    return $profile;
});


// Then return it to your view
return view('profiles')->withProfiles('profiles'));

当然,您可以内联所有这些内容:

$profiles = \App\Profiles
                ::orderBy('created_at', 'DESC')
                ->get()
                ->map(function($profile) {
                    $profile->distance = 'your value';

                    return $profile;
                });

// Then return it to your view
return view('profiles')->withProfiles('profiles'));

您说:

  

我基本上希望将数据库中的信息和我的自定义信息合二为一   数组,以便我可以轻松地将其传递给视图。

如果您希望自定义/格式化数据以使其返回视图,为什么不使用Eloquent Resources?查看文档的this section

答案 3 :(得分:0)

使用“ get()”从数据库中获取数据时,它是对象的集合。现在如何处理它。

$profiles = \App\Profiles::orderBy('created_at', 'DESC')->get()->toArray();

$collect = []; //empty array to collect custom data
foreach ($profiles as $profile) {

      $profile["distance"] = "Your data";
      $collect[] = $profile; 
}

现在,您可以在视图文件中传递“ $ collect”数组