找不到方法项 - 多对多关系

问题描述:

我有一个产品和项目表,其中包含多对多关系和一个数据透视表(item_product)。找不到方法项 - 多对多关系

这就是我的模型的样子。当我尝试检索属于产品(类别)$selectedItems= $products->items()->get();的项目时,出现错误“找不到方法项目”。我似乎无法找到我的错误在哪里。请帮助

产品

public function items() 
    { 
     return $this->belongsToMany('App\Item','item_product','product_id','item_id') 
     ->withTimestamps(); 
    } 

项目

public function products() 
    { 
     return $this->belongsToMany('App\Product','item_product','item_id','product_id') 
     ->withTimestamps(); 
    } 

控制器

 $products = Product::all()->where('id',1); 
     $myItems= $products->items()->get(); 
     return view('products',compact('myItems','products')); 
+0

我认为你需要发布更多的代码。是'产品'的'产品'和实例还是'产品'的集合? –

+0

'$ products-> items;'应该工作.... Laravel自动转换作为你的产品模型属性访问的方法,并为你执行'get()' –

+0

@mtinsley看看我的更新..控制器 – XamarinDevil

$products不是Product

一个实例试试这个:

$product = Product::findOrFail(1); 
$myItems = $product->items; 
return view('products',compact('myItems','product')); 

说明:

$product = Product::findOrFail(1); 

这将通过ID获取一个单一的产品模型,或者抛出一个异常,如果该产品不存在。

$myItems = $product->items; 

这会将$myItems设置为一组项目。这相当于:

$myItems = $product->items()->get(); 

我建议您阅读documentation on relationships

+0

我正在学习laravel,但你可以描述集合和实例之间的区别吗? – XamarinDevil

+0

我得到另一个错误'试图获取非对象的属性' – XamarinDevil

+0

@XamarinDevil更新了我的答案 –