Каков наилучший способ напрямую вернуть значение отношения (один ко многим) вместо его идентификатора? - PullRequest
1 голос
/ 30 мая 2020

Как я могу напрямую вернуть значение представленных отношений (указывается c) из коробки без каких-либо дополнительных процессов?

Допустим, у меня есть таблицы и отношения, как показано ниже:

user
id name status_id
1  Jane 0
2  Joe  1

status
id title
1  pending
2  accepted

Здесь пользователь принадлежит к статусу, а статус hasMany пользователей.

public function status()
{
    return $this->belongsTo('App\User');
}

public function users()
{
    return $this->hasMany('App\Status');
}

Вместо этого я имею в виду этот ответ (с нетерпеливой загрузкой):

{ 
   {"id":"1", "user":"Jane","status_id":"1", "status":{"id":"1", "title":"pending"} }, 
   {"id":"2", "user":"Joe", "status_id":"2", "status":{"id":"2", "title":"accepted"} }
}

Я ищу это:

{ 
   {"id":"1", "user":"Jane","status":"pending" }, 
   {"id":"2", "user":"Joe", "status":"accepted" }
}

PS: Я не уверен, спрашивали ли об этом раньше, по крайней мере, я не мог найти ни одного. Это можно было задать разными способами.

1 Ответ

3 голосов
/ 30 мая 2020

Вы можете определить аксессор , который передает отношение в настраиваемое поле, а затем скрывает само отношение из ответов JSON:

protected $hidden = [ 'userStatus' ];
protected $with = [ 'userStatus' ]; // Always load it eagerly

public function userStatus()
{
    return $this->belongsTo('App\Status'); // I'm assuming this is what you actually have
}

public function getStatusAttribute() {
    return $this->userStatus->title;
}

protected $appends = [ 'status' ];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...