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 如果每个模型的功能不相同,则更好。
我为我的一个模型添加了一个方法:
<?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 如果每个模型的功能不相同,则更好。