2015-02-24 2 views
3

Я создаю приложение, используя Laravel 4, но имею некоторые проблемы с сводными таблицами.Laravel получить модель от ID с musttoMany

есть 3 таблицы Категории, Продукты, products_categories (шарнирные)

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

public function product() 
{ 
    return $this->belongsToMany('Product', 'products_categories'); 

} 

Продукты Модель

public function category() 
{ 
    return $this->belongsToMany('Category', 'products_categories'); 
} 

products_categories таблица имеет product_id и category_id столбцов.

То, что я хочу взять все продукты в этой категории и перечислить их в представлениях

$category = Category::where('id' , '=' , '7')->first(); 

    foreach($category->product as $product){ 

     echo $product->id; 
    } 

Я могу видеть Идентификаторы продукта, связанные с конкретной категории, но когда я хочу, чтобы использовать его, чтобы получить все сам продукт нравится:

$category = Category::where('id' , '=' , '7')->first(); 

    foreach($category->product as $product){ 

     $product = Product::where('id' , '=' , $product->id)->get(); 
    } 

    return View::make('index')->with('product',$product); 

он не работает :(с этой ошибкой

Попытка получить свойство необъектных

Я попытался это

$category = Category::where('id' , '=' , '7')->first(); 

    $product = array(); 

    foreach($category->product as $product){ 

     $product[] = Product::where('id' , '=' , $product->id)->get(); 

    } 

    return View::make('index')->with('product',$product); 

на этот раз он выдает эту ошибку

Отсутствует аргумент 2 для Осветите \ Database \ Красноречивый \ Model :: SetAttribute()

Как я могу это решить?

ответ

2

Непосредственная проблема заключается в том, что вы пытаетесь повторно использовать переменную итератора из цикла foreach. Это приводит к неожиданным результатам.

foreach($category->product as $product) { 
           ^^^^^^^^ 
    $product = Product::where('id' , '=' , $product->id)->get(); 
    ^^^^^^^^ 
} 

Однако нет необходимости в этом. $category->product - это уже коллекция моделей «Элегантный продукт». Нет необходимости снова пытаться извлекать отдельные продукты; вы уже имеете их.

Если вы пытаетесь передать эту коллекцию мнению, вы просто могли бы сделать:

return View::make('index')->with('product', $category->product); 

Кроме того, в качестве примечания, если вы пытаетесь найти запись по идентификатору, вы может использовать метод find():

$category = Category::find(7); 
Смежные вопросы