我有一个不应该发生的奇怪问题。
我有一段代码来检索数据透视表的值
$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 :(得分:0)
当您访问Product::find(296)
您未通过相关模型访问时,您正在访问产品模型本身,因此Laravel / Eloquent不会加载任何关系信息,例如数据透视字段因为没有为产品模型定义那些枢轴字段,所以它们是为关系定义的。
如果你这样做:
$retailer = Retailer::with('products')->find(...);
然后访问该模型上的Products关系,它应该可以工作:
$product = $retailer->products->first();
var_dump($product->pivot);
总之,产品本身没有任何枢轴字段。数据透视字段用于产品和零售商的关系。