Laravel 5.6 Reverse HasManyThrough

时间:2018-04-04 20:39:18

标签: php laravel

我的数据库中有以下表结构:

产品

  • ID

product_formats

  • ID
  • PRODUCT_ID

product_prices

  • ID
  • product_format_id

当我在$this->format->product;课程中尝试ProductPrice时,我收到错误:

  

LogicException:App \ ProductPrice :: product必须返回一个关系实例。

当我在我的函数中执行dd时:

dd($this->format()->first()->product);

我得到了该产品的实例。但是,删除dd仍然会抛出异常。

为什么我得到LogicException?

ProductPrice

class ProductPrice extends Model
{
    public function format()
    {
        return $this->belongsTo(ProductFormat::class, 'product_format_id');
    }

    public function product()
    {
        return $this->format->product;
    }
}

ProductFormat

class ProductFormat extends Model
{
    public function product()
    {
        return $this->belongsTo(Product::class);
    }
}

更新

dd($this->format);的结果会返回ProductFormat的实例。

1 个答案:

答案 0 :(得分:1)

调查后,HasAttributes::getRelationshipFromMethod(),我已经注意到,如果该属性不在类的properties属性存在,它会尝试检索的关系,因此错误。

要解决这个问题,我必须在课堂上添加以下内容:

protected $attributes = ['product'];

否则,我可以将product称为函数而不是属性:

$price->product();