我可以使用Eloquent模型作为一个功能齐全的类吗?


Can I use an Eloquent model as a fully featured class?

我刚刚学习Laravel 4,我不确定Eloquent模型是如何工作的。我很清楚,它们是与数据库交互的好方法,但我可以在扩展Eloquent的类上定义构造函数和函数以使用它进行数据库交互吗?

是的!一个继承了Eloquent的类,并不会使它成为一个只用于Eloquent目的的类。您已经了解了类扩展的概念。类扩展可以简单地从另一个现有类向任何类添加功能。在本例中是Eloquent

您可以采用您已经拥有的任何模型,并且明天决定您想要与Eloquent一起使用它并简单地扩展它。原来的类还是原来的类,工作原理一样。如果父类有同名的东西,原始类中的任何方法或属性都将覆盖其父类(Eloquent)。

实际上,在扩展Eloquent的类中创建其他方法是创建健壮模型的真正方法,这些模型可以做各种很酷的事情。例如,我在User模型中创建方法来计算离他们的生日还有多少天。我没有将生日列拉到控制器中,然后使用PHP进行计算,而是使用User::daysUntilBirthday();

如果你使用了一个构造函数并扩展了Eloquent,请确保你仍然启动了Eloquent的构造函数。

class MyModel extends Eloquent {
   public function __construct($attributes = array(), $exists = false)
   {
      parent::__construct($attributes, $exists); // This will fire off Eloquent's constructor.
      // Your construct code.
   }
}