laravel集合到数组


75

我有两个模型,PostComment;许多评论属于一个帖子。我正在尝试以数组形式访问与帖子关联的所有评论。

我有以下内容,给出了一个集合。

$comments_collection = $post->comments()->get()

我如何将其$comments_collection转换为数组?是否有更直接的方式通过雄辩的关系访问此数组?

Answers:


124

您可以如下使用雄辩的toArray()

toArray方法将集合转换为纯PHP数组。如果集合的值是Eloquent模型,则模型也将转换为数组

$comments_collection = $post->comments()->get()->toArray()

从Laravel Docs:

toArray还将所有可作为Arrayable实例的集合的嵌套对象转换为数组。如果要获取原始基础数组,请改用all方法。


有时,当没有数据时,此方法将引发异常。
Akshay Kulkarni

你能告诉我一个期望的情况吗?我尝试使用空数据,但没有引发异常
Tijan Manandhar

1
Nit-pick:如果数组元素实现\Illuminate\Contracts\Support\Arrayable,它们也将被递归转换为数组。这包括雄辩的模型。
nevvermind

3
这不应该是最佳答案。->toArray()不会将集合转换为数组,而是将整个内容转换为数组,包括集合的项。->all()应该是公认的答案。
Sebastien C.

@SebastienC。OP曾问过将集合转换为数组的方法。所以,toArray()这很好。另外,我已经用文档更新了答案。
Drudge Rajen

7

使用all()方法-它旨在返回Collection的项目:

/**
 * Get all of the items in the collection.
 *
 * @return array
 */
public function all()
{
    return $this->items;
}



1

使用collect($comments_collection)

否则,尝试json_encode($comments_collection)转换为json。


0

尝试在数组中收集函数,例如:

$comments_collection = collect($post->comments()->get()->toArray());

这种方法可以帮助您

toArray()collect()

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.