Итак, я запускаю таблицы с локализацией, но я держу строки в отдельной таблице «master».Создание чистого форматированного json с помощью сводных таблиц Laravel
Скажем, у меня есть таблица для каждого объекта:
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());
}
Так с этим я могу сделать Product::with('translations')->get()
для моего JSON. Однако ...
То, что я хотел
{
"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-выход?
EDIT: Обнаружен https://github.com/laravel/framework/issues/745
Таким образом, используя $hidden
я могу скрыть определенные поля. Ухоженная.
EDIT: Использование $appends
с помощью метода доступа getNameAttribute()
Я могу создать новое свойство для своего json. Задача решена!
Было бы хорошо, если бы вы могли опубликовать свой ответ и отметьте это, как решить? Вы использовали это: http://laravel.com/docs/5.0/eloquent#accessors-and-mutators? – wiesson