许多模型的Laravel共同方法



我在一个模型之一中添加了一种方法:

<?php
namespace App;
use IlluminateDatabaseEloquentModel;
class Test extends Model
{
    public static function boot()
    {
        parent::boot();
        static::created(function ($model) {
            //log $model or maybe do something more complex here
        });
    }
}

我希望将相同的行为扩展到许多其他模型。复制粘贴这种效果似乎是一个好主意,因为如果某些事情发生了变化,我不想在不同的地方更改它。什么是仅编写一次并获得多个模型的相同行为的最佳解决方案?

特征是为此构建的。写一次并在所有类上使用。

在应用程序/特征/mytraitname.php

中创建一个特质
<?php
namespace AppTraits;
use CarbonCarbon;
trait MyTraitName
{
    public function someName() {
        // TO DO;
    }
}

,然后将其导入到任何模型类的顶部,例如用户:

<?php 
namespace App;
use AppTraitsMyTraitName;
use IlluminateNotificationsNotifiable;
use IlluminateFoundationAuthUser as Authenticatable;
class User extends Authenticatable
{
    use Notifiable, MyTraitName;
 ..............

扩展课程和制作性状之间的区别是,当您制作特质时,该功能已经编写,并且在每个模型上自动使用相同的方式,并且如果该功能不进行,则从某个基类延伸会更好每个型号都相同。

最新更新