Laravel:使用Eloquent检索超类的实例

时间:2018-04-15 12:43:19

标签: php database laravel polymorphism

以下是我的(简化)模型:

abstract class Animal extends Illuminate\Database\Eloquent\Model
{
    protected $name;
}

class Cat extends Animal
{
}

class Dog extends Animal
{
}

猫和狗有其他几个属性。我已经制作了动物摘要,因为每只动物都是猫或狗,所以没有动物的实际情况。

现在,我希望能够列出:

  • Cat::all()应检索所有猫。
  • Dog::all()应检索所有猫。
  • Animal::all()应检索所有猫狗。

eloquent通常可以实现吗?如果,是的:我应该为此目的使用多态关系吗?

1 个答案:

答案 0 :(得分:1)

在Eloquent中没有支持。

如果CatDog具有相似的属性,则单个animals表可能是最佳解决方案。您可以使用范围仅获得一个物种:

class Animal extends Illuminate\Database\Eloquent\Model
{
    public function scopeCats($query)
    {
        return $query->where('species', 'cat');
    }
}

$cats = Animal::cats()->get();