tetra
@tetra
Человек оркестр

Запрос со свзями в Eloquent: Relationships как составить?

Есть 3 модели Категория, Продукт, Атрибуты продукта
class Category extends Model
{
/**
     * Category has many Products.
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
public function products()
    {
        return $this->belongsToMany(Product::class)->withTimestamps();
    }
}

class Product extends Model
{ /**
     * Product has many Categories.
     *
     * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
     */
    public function categories()
    {
        return $this->belongsToMany(Category::class)->withTimestamps();
    }
}

class Attribute extends Model
{
/**
   * Attribute has many Products.
   *
   * @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
   */
  public function products()
    {
        return $this->belongsToMany(Product::class)->withTimestamps();
    }
}

Задача стоит следующим образом:
В контроллере категории нужно выводить продукты и связанные с ними атрибуты
Контроллер выглядит сейчас так:
class CatalogController extends Controller
{


    /**
     * Display the specified resource.
     *
     * @param  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $products=Category::with('products', 'attributes')->where('id', $id)->orWhere('slug', $id)->first();
        //dd($products);
        return view('catalog.index')->with('products', $products);
    }


}


Ошибка в том что attributes никак не связанны с Category::class

Category::class связан с Product::class через pivot table category_product
и соответсвенно Product::class связан с Attribute::class через attribute_product

соответсвенно вопрос:
как правильно сделать запрос в контроллере?
или нужно что то добавить в модели, чтобы появилась связь Category::class - Attribute::class?
если нужно то что?
  • Вопрос задан
  • 86 просмотров
Пригласить эксперта
Ответы на вопрос 1
tetra
@tetra Автор вопроса
Человек оркестр
Алексей указал на документацию но не учел что связи у меня через pivot table и решение не подходит для этого случая
есть пакет который в приципе решает эту проблему, но я сделал по простому:
/**
     * Display the specified resource.
     *
     * @param  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        $data=Category::with('products')->where('id', $id)->orWhere('slug', $id)->first();
        $data->products->map(function ($product) {
        $p = Product::find($product->id);
        $sizes=[];
        foreach ($p->attributes as $a) {
          $sizes[]=$a;
        }
        $product->sizes = $sizes;
        return $product;
    });

      return view('catalog.index')->with('products', $data);
    }
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы