Laravel: возвращает атрибут из отношения, а не весь объект

Я разрабатываю и 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

1

Решение

Внутри модели, которая вызывается 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, пожалуйста, просмотрите следующий документ:

https://laravel.com/docs/5.4/eloquent-mutators

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]