morphTo和hasMany Laravel

时间:2017-05-10 15:00:24

标签: php mysql laravel

关于Laravel中一些数据模型关系的快速查询。

我有一个属于用户的产品,但用户可以拥有许多产品。但是产品也可以让很多人在该产品上提供报价;

class Product extends Model
{
    public function user(){
        return $this->belongsTo('App\User');
    }
    public function offer(){
        return $this->hasMany('App\Offer');
    }

但是产品也可以有不同的子类型的产品,例如,一个可能是车辆或手机,每个在我的迁移中都有不同的列,所以我假设我需要变形很多

Product.php

public function imageable()
{
    return $this->morphTo();
}

Vehicle.php

public function products()
{
  return $this->morphMany('App\Product', 'imageable');
}

然而,在致电时:

$product = Product::findOrFail($id);

当我尝试执行$product->vehicle

之类的操作时,我得到null

我将数据库中车辆的ID添加到产品表中的imageable_id,并将imageable类型添加到' vehicle'在产品表上也是如此。

我在这里做错了什么?

1 个答案:

答案 0 :(得分:5)

一切看起来都正确,您应该通过imageable

访问它
$product = Product::findOrFail($id);
return $product->imageable;

来自Laravel documentation

  

您也可以从中检索多态关系的所有者   通过访问执行方法的名称来获取多态模型   对morphTo的调用。

在您的情况下,执行morphTo调用的方法是可成像的。