Laravel 多种模型的相互方法

Laravel mutual methods for many models

我为我的一个模型添加了一个方法:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Test extends Model
{
    public static function boot()
    {
        parent::boot();

        static::created(function ($model) {
            //log $model or maybe do something more complex here
        });
    }
}

而且我希望将相同的行为扩展到许多其他模型。复制粘贴这似乎是个好主意,因为如果有什么改变,我不想在不同的地方改变它。仅编写一次并使多个模型具有相同行为的最佳解决方案是什么?

特质就是为此而生。编写一次并用于所有 classes.

在 app/Traits/MyTraitName 中创建特征。php

<?php

namespace App\Traits;

use Carbon\Carbon;

trait MyTraitName
{

    public function someName() {
        // TO DO;
    }

}

然后将其导入到任何模型之上 class 例如 User:

<?php 

namespace App;

use App\Traits\MyTraitName;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable, MyTraitName;

 ..............

扩展 class 和制作特征之间的区别在于,当您制作特征时,该功能已经编写并且在每个模型上自动以相同的方式使用,并从某些基础扩展 class 如果每个模型的功能不相同,则更好。