以下是我的(简化)模型:
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
通常可以实现吗?如果,是的:我应该为此目的使用多态关系吗?
答案 0 :(得分:1)
在Eloquent中没有支持。
如果Cat
和Dog
具有相似的属性,则单个animals
表可能是最佳解决方案。您可以使用范围仅获得一个物种:
class Animal extends Illuminate\Database\Eloquent\Model
{
public function scopeCats($query)
{
return $query->where('species', 'cat');
}
}
$cats = Animal::cats()->get();