Я разрабатываю и API с Laravel, но у меня есть проблема или вопрос с отношениями 1: N (один ко многим). Есть ли возможность показать только один атрибут, как это, где creatorUser
это мое отношение.
{
"id": "string",
"production": "string",
"title": "string",
"description": "string",
"resourceType": "string",
"collections": "string",
"creatorUser: "name"}
CreatorUser — это мои отношения, и в этот момент я получаю вот так
{
"id": "string",
"production": "string",
"title": "string",
"description": "string",
"resourceType": "string",
"collections": "string",
"creatorUser: {
id: "string",
name: "string"}
}
Я не хочу извлекать данные из объекта наподобие creatorUser, просто имя и показываться так "creatorUser: "name"
Там в любом случае?
и я получаю мою информацию, как это (это мой контроллер)
return CTL_Resource::with(['creationCountry' => function ($query) {
$query->select('idCountry', 'name');
}, 'creatorUser' => function ($query) {
$query->select('idUser', 'name');
}, 'resourceType' => function ($query) {
$query->select(['idResourceType', 'name']);
}, 'tags' => function ($query) {
$query->select(['idTag' => 'name']);
}, 'quickTags' => function ($query) {
$query->select(['idQuickTag' => 'name']);
}, 'relatedTo' => function ($query) {
$query->select(['idRelatedTo' => 'name']);
}])->orderBy('createTime', 'DESC')->paginate($request->per_page);
Спасибо за помощь.
(не спрашивайте, почему идентификаторы — это строки, хахаха, потому что они UUID): P
Внутри модели, которая вызывается creatorUser. "App\User"
.. использовать защищенную переменную $hidden
установить в качестве массива и передать имя поля (или имя атрибута) в массив, чтобы скрыть идентификатор этой модели в возвращаемом объекте json …
Так, например:
Скажем, у меня есть модель с именем Foo, и внутри модели Foo мне возвращают это:
{
foo_order: 039,
foo_id: 12982,
foo_name: "Bar"}
В этом примере я хочу избавиться или скрыть, foo_id
из возвращенного объекта JSON. Тогда внутри моего "App\Foo"
модель, которую я бы просто добавил в:
namespace app;
use whatever\goes\here;
class FooModel extends Model
{
...
...
/*
* Hide the listed fields (Attributes)
* from the returned json object
*/
protected $hidden = array('foo_id');
}
результат ДОЛЖЕН быть следующим, когда вы «получаете» результаты из этой конкретной таблицы / модели:
{
foo_order: 039,
foo_name: "Bar"}
Для получения дополнительной информации на более глубоком уровне, чтобы изменить ваши возвращенные результаты JSON, пожалуйста, просмотрите следующий документ:
Других решений пока нет …