Laravel метод доступа возвращает весь объект вместо одного поля - PullRequest
0 голосов
/ 21 июня 2020

У меня есть следующие отношения между MenuItem и Category:

Модель элемента меню

public function category()
    {
        return $this->belongsTo('App\Models\Category');
    }

public function getCategoryNameAttribute()
    {
        return $this->attributes['category_name'] = $this->category->name;
    }

Категория Модель

public function menuItems()
    {
        return $this->hasMany('App\Models\MenuItem');
    }

Теперь с моего контроллера при возврате списка всех пунктов меню я хочу вернуть category_name вместе с результатами. Как вы заметили в приведенном выше коде, я создал аксессуар getCategoryNameAttribute для получения имени.

Метод, который возвращает список всех пунктов меню в моем контроллере:

public function index()
    {
        $menuItems = $this->menuItem->all();

        foreach ($menuItems as $menuItem) {
            $menuItem['category_name'] = $menuItem->category_name;
        }

        return $menuItems;
    }

Если Я делаю dd($menuItems); сразу после $menuItems = $this->menuItem->all();, получаю:

[
        "id" => 1
        "name" => "Hailee Ondricka"
        "category_id" => 1
        "side" => 0
        "side_only" => 0
        "description" => "Amet delectus exercitationem neque tenetur aliquam. Et repudiandae nam nam voluptates laboriosam autem. Natus quo quia ea. Explicabo reprehenderit consequatur quia aliquam incidunt."
        "image" => "https://lorempixel.com/640/480/?39201"
        "available" => 0
        "active" => 0
        "created_at" => "2020-06-21 00:41:02"
        "updated_at" => "2020-06-21 00:41:02"
      ]

, но после foreach, в котором я добавляю category_name, получаю:

"id" => 1
    "name" => "Krista Donnelly"
    "category_id" => 1
    "side" => false
    "side_only" => false
    "description" => "Sapiente est maiores non voluptatum odio placeat. Cum enim aut odit autem aut autem. Quasi excepturi omnis laborum aut officia tempora accusamus."
    "image" => "https://lorempixel.com/640/480/?96389"
    "available" => true
    "active" => false
    "created_at" => "2020-06-21 00:42:49"
    "updated_at" => "2020-06-21 00:42:49"
    "category_name" => "Dr. Christelle Purdy MD"
    "category" => array:4 [
      "id" => 1
      "name" => "Dr. Christelle Purdy MD"
      "created_at" => "2020-06-21 00:42:49"
      "updated_at" => "2020-06-21 00:42:49"
    ]
  ]

As вы можете видеть в результате, я получаю category_name, но я также получаю весь объект category, связанный с этой категорией, почему это так? как предотвратить возврат всего объекта?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...