Получить только столбец из отношений, Laravel - PullRequest
0 голосов
/ 14 апреля 2020

Получить pluck('name'); от контроллера. Прямо сейчас я получаю все данные из отношений (id, made_at, et c).

//from my User Controller
$user = User::where('id', $id)->get(['id', 'name', 'email', 'points'])->first();
$user->abilities();

//from my User Model
    public function roles()
    {
        return $this->belongsToMany(Role::class)->withTimestamps();
    }
    public function abilities()
    {
        return $this->roles->map->abilities->flatten()->pluck('name')->unique(); //from here I want to get just the name
    }

Ответы [ 2 ]

0 голосов
/ 14 апреля 2020
 // use pluck in controller
   $user->abilities()->pluck('name');
 // model
  public function abilities()
     {
     return $this->hasMany(AvailabilityModelName::class, 'id');
      }
0 голосов
/ 14 апреля 2020

Вам необходимо получить возвращаемое значение вашего map и вместо этого использовать flatMap и исключить использование flatten.

public function abilities()
{
    $abilities = $this->roles->flatMap->abilities;
    return $abilities->pluck('name')->unique(); 
}

Ссылка

https://laravel.com/docs/7.x/collections#method -flatmap

Метод flatMap выполняет итерацию по коллекции и передает каждое значение данному обратному вызову. Функция обратного вызова может свободно изменять элемент и возвращать его, тем самым формируя новую коллекцию измененных элементов. Затем массив выравнивается по уровню:

...