使用Laravel数据透视表生成干净格式化的json

时间:2014-02-08 11:11:00

标签: json laravel eloquent

所以我正在运行具有本地化的表格,但我将字符串保存在单独的“主”表中。

假设我有一个每个实体的表格:

Products
  id
  price
  ...

翻译表

Translations
  id
  name
  description
  ...

关系表

product_translation
  product_id
  translation_id
  lang --enum('en', 'es', 'fr',...)

问题:这个

附带的不那么漂亮的json

所以我创建了一个使用多对多关系的BaseModel

public function translations()
{
  return $this
  ->belongsToMany('Translation')
  ->where('lang', '=' App::getLocale());
}

因此我可以为我的json做Product::with('translations')->get()。然而...

我想要什么

{
    "name": "Foo",
    "description": "Bar",
    "price": "1000",
    "stock": "10",
}

我得到了什么

{
  "id": "1",
  "price": "1000",
  "stock": "10",
  "translations": [
    {
      "id": "1",
      "name": "Foo",
      "description": "Bar",
      "pivot": {
        "product_id": "1",
        "translation_id": "1"
      }
    }
  ]
}

正如你所看到的那样,输出的包袱太多了。如何限制我想要生成所需json输出的字段?

编辑:发现了https://github.com/laravel/framework/issues/745

因此使用$hidden我可以隐藏特定字段。整齐。

编辑:使用$appends getNameAttribute()访问器方法,我可以为我的json创建一个新属性。问题解决了!

2 个答案:

答案 0 :(得分:2)

这是应该添加到类Product的代码(在问题本身中回答):

.
|-- api
|   |-- __init__.py
|   |-- __init__.pyc
|   |-- media
|   |   `-- sample-media.jpg
|   |-- settings.py
|   |-- settings.pyc
|   |-- urls.py
|   |-- urls.pyc
|   |-- wsgi.py
|   `-- wsgi.pyc
|-- db.sqlite3
|-- manage.py
|-- static
|   `-- admin
|       ... ... ... ...
|-- uwsgi_conf.ini
`-- uwsgi_params

答案 1 :(得分:0)

您可以使用Laravel查询来获取所需的属性。 请参阅文档:http://laravel.com/docs/5.0/queries#selects

如果addind - > gt; select()只接收你真正需要的东西。