在Laravel中检索数据透视表列值

时间:2017-08-03 13:33:36

标签: php laravel model pivot

我有一个不应该发生的奇怪问题。

我有一段代码来检索数据透视表的值

$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');

}

我只是看不出哪里出错了?

1 个答案:

答案 0 :(得分:0)

当您访问Product::find(296)您未通过相关模型访问时,您正在访问产品模型本身,因此Laravel / Eloquent不会加载任何关系信息,例如数据透视字段因为没有为产品模型定义那些枢轴字段,所以它们是为关系定义的。

如果你这样做:

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

然后访问该模型上的Products关系,它应该可以工作:

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

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