2016-09-17 4 views
0

У меня есть следующие моделиLaravel Eloquent многие ко многим с другого столбца как ключевой

Category 
    id   // we don't want to use this one for the relation 
    category_id // we want to use this 

Product 
    id 

CategoryProduct 
    product_id // points to "id" on products table 
    category_id // points to **category_id** on categories table 

У меня есть модель набора продуктов следующим образом (только самое последнее изменение).

class Product { 
    public function categories() { 
     return $this->belongsToMany('Category', 'categories_products', 'category_id'); 
    } 
} 

Когда я пытаюсь получить продукт с категориями, как следует ...

Product::with('categories')->get(); 

я либо получить неправильные категории, поскольку запрос использует id на categories в качестве внешнего ключа. Мне нужно, чтобы он использовал category_id в таблице категорий.

Или я вообще ничего не получаю. Я не могу показать, как настроить, какие столбцы использовать для метода belongsToMany.

+0

Я думаю, что вы хотите 'hasManyThrough' смотрите здесь: https://laravel.com/docs/5.3/eloquent-relationships#has-many-through – Blake

+0

код [Многие Чтобы Многие документы] (https://laravel.com/docs/5.2/eloquent-relationships#many-to-many) имеют хороший пример того, что входит в каждую позицию аргумента для 'attribToMany()'. Попробуйте 'return $ this-> attribToMany ('Category', 'categories_products', 'product_id', 'category_id');' – Qevo

ответ

0

Попробуйте следовать,

class Product { 
      public function categories() { 
       return $this->belongsToMany('Category', 'categories_products', 'product_id','category_id'); 
      } 
    } 
Смежные вопросы