Laravel - возвращает связанные модели параметров в контроллер - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть следующий маршрут:

Route::get('/api/products/{product}', 'ProductController@get');

Моя модель продукта выглядит следующим образом:

class Product extends Model
{
    public function ingredients()
    {
        return $this->belongsToMany(Ingredient::class)->withPivot('value');
    }
}

В моем контроллере метод:

public function get(Product $product)
{
    return $product;
}

Это возвращает только атрибуты объекта Product в виде JSON.Я также хотел бы вернуть связанные ингредиенты и значения сводной таблицы (как это было бы с методом with) и, возможно, другие связанные модели.

return $product->with('ingredients') создает коллекцию всех продуктов, так что это на самом деле не работает, я должен снова отфильтровать его по идентификатору продукта.Очевидно, я могу сам создать JSON, но это становится утомительным, если я хочу включить несколько связанных моделей.Есть ли простой способ сделать это?

1 Ответ

4 голосов
/ 25 апреля 2019

У вас есть три варианта:

  1. Использование $with в модели

    class Product extends Model
    {
        protected $with = ['ingredients'];
        public function ingredients()
        {
            return $this->belongsToMany(Ingredient::class)->withPivot('value');
        }
    }
    
  2. Загрузить отношение и вернуть продукт:

    public function get(Product $product)
    {
        $product->ingredients;
        return $product;
    }
    
  3. Используйте метод load для продукта:

    public function get(Product $product) 
    {
        return $product->load('ingredients'); 
    }
    
...