2017-08-03 151 views
0

我遇到了一个不应该发生的奇怪问题。在Laravel中检索数据透视表列值

我有一段代码以检索数据透视表

$product = Product::find(296); 

dd($product->pivot->aisle); 

,因为我已经这样做了几个其他项目它应该工作的价值。突然,它给我下面的错误今天:

(1/1) ErrorException 
Trying to get property of non-object 
in ProductController.php (line 42) 
at HandleExceptions->handleError(8, 'Trying to get property of non-object', 
'C:\\laragon\\www\\Sales\\app\\Http\\Controllers\\ProductController.php', 
42, array('retailer' => object(Retailer), 'product' => object(Product))) 
in ProductController.php (line 42) 

在我的产品的型号我有如下:

public function retailers(){ 

return $this->belongsToMany(Retailer::class)->withPivot('aisle','ifinstock','ifstock','ifticketed','ifonshelf','iflowstock','note','id','created_at','updated_at','stocklevel'); 

} 

在我的零售商模式,我有:

public function products(){ 

return $this->belongsToMany(Product::class)->withPivot('aisle','ifinstock','ifstock','ifticketed','ifonshelf','iflowstock','note','id','created_at','updated_at','stocklevel'); 

} 

我做不到看哪里出了问题?

+0

尝试dd($ product)和dd($ product-> pivot)。他们中的任何一个都返回null?如果是这样,你的问题从那里开始。 – Jed

+0

尝试'''dd($ product-> retailers);''' –

+0

我们能否看到您的产品模型的外观? –

回答

0

当您访问Product::find(296)时,您并未通过相关模型进行访问,您正在访问产品模型本身,因此Laravel/Eloquent将不会加载任何关系信息,如数据透视表字段,因为这些透视字段不是为产品模型定义,它们是为关系定义的。

如果你做的事:

$retailer = Retailer::with('products')->find(...); 

然后访问该型号的产品的关系,它应该工作:

$product = $retailer->products->first(); 
var_dump($product->pivot); 

总之,产品本身不具有任何数据透视表字段。枢轴字段用于产品零售商的关系。