laravel集合对象中的新属性以JSON返回

时间:2018-08-16 15:12:03

标签: laravel laravel-5

我正在用API返回帖子类别(M:M关系),我需要这些类别以逗号分隔的值形式出现 在名为category_csv

的新属性中

我正在模型中设置公共$category_csv,并在 控制器并为该属性分配csv值

在控制器中,这就是我获得类别为Product::with(['categories'])->get()的产品的方式

这是最好的方法吗?

1 个答案:

答案 0 :(得分:2)

请参考文档:https://laravel.com/docs/5.6/eloquent-serialization#appending-values-to-json

您可以使用这种方式将值附加到JSON,这是一个示例。

在模型中,您可以定义protected $appends = ['category_csv'];

并在模型中定义新方法

/**
     * Get product categories in csv format.
     */
    public function getCategoryCsvAttribute()
    {
        $product_category = [];
        foreach ($this->categories as $category) {
            $product_category[] = $category->name;
        }
        return $this->category_csv = implode(',', $product_category);
    }

现在,当您尝试调用API get方法及其返回的内容时,它将返回带有CSV值的新属性