一对多多态关系

时间:2018-08-20 14:43:13

标签: eloquent polymorphism laravel-5.4 relationship

这是常见的情况,但到目前为止,我仍然无法以某种方式找到合理的解决方案。基本上,我需要以下内容: 我有模型House,其中包含其他几个模型(例如Brick,“ Stick”,“ Chair”等)。它们每个都与众议院有一个归属关系(因此基本上在stickschairsbricks表中有一个house_id列)。每个模型都包含一个public function house()方法,该方法返回它们所属的房屋。现在出现了一个问题,我想通过一种方法来获得房屋的所有用品,例如public function supplies(),它应该返回类Stick,{{1} }和Chair。有什么方便的方法可以做到这一点吗?例如,我可以通过一个特性将这些类联合起来,并以某种方式指向房屋的方法中的那个特性,或者可以使用一个Brick的BaseClass,所有供给都应该继承?有什么建议吗?非常感谢您的任何帮助,并在此先感谢!

1 个答案:

答案 0 :(得分:1)

Laravel中没有对此的内置支持。

您可以定义单独的HasMany关系,然后将它们与accessor合并:

class House extends Model {
    public function bricks() {
        return $this->hasMany(Brick::class);
    }

    public function chairs() {
        return $this->hasMany(Chair::class);
    }

    public function sticks() {
        return $this->hasMany(Stick::class);
    }

    public function getSuppliesAttribute() {
        return $this->bricks->toBase()->merge($this->chairs)->merge($this->sticks);
    }
}

$supplies = $house->supplies;