Eloquent hasManyThrough与belongsTo在中间模型

时间:2017-03-16 19:55:58

标签: laravel eloquent

当中间模型具有 hasMany 关系时,我可以使 hasManyThrough 关系正常工作。但是,如果中间模型有 belongsTo ,比如我的StoreProduct模型呢?对我来说这应该能够起作用是有意义的,但它并没有。

我错过了什么?

我如何获得所有产品的商店(通过" StoreProducts")?

class Product extends Model
{
    public function storeProducts()
    {
        return $this->hasMany('App\StoreProduct');
    }

    public function stores()
    {
        return $this->hasManyThrough('App\Store', 'App\StoreProduct');
    }
}

class StoreProduct extends Model
{
    public function store()
    {
        return $this->belongsTo('App\Store');
    }
}

class Store extends Model
{
    public function storeProducts()
    {
        return $this->hasMany('App\StoreProduct');
    }
}

1 个答案:

答案 0 :(得分:1)

此关系类型无效。 HasManyThroughHasManyHasManyThroughBelongsTo关系不存在。你可以自己编写来实现这个目标,或者你可以向后工作(我相信这更容易)

public function stores()
{
    return Store::whereHas('store_products', function(q){
        return $q->whereHas('product', function(q){
             return $q->where('id', $this->id);
        });
    });
}

此功能将取代Products模型中的功能。