Laravel 5全局模型方法?

时间:2017-01-22 21:48:49

标签: php laravel laravel-5 eloquent

我有许多表/模型设置有'locked_at'和'locked_by'列,实质上我想做的是调用类似的东西:

$model->lock();

此方法将检查该行是否尚未锁定,设置两个单元格然后保存模型。

我可以在每个模型中创建锁定方法,但这似乎不是最好的主意。我宁愿创建一次方法,并让所有模型都可以访问它。

有没有办法在laravel中这样做?

2 个答案:

答案 0 :(得分:2)

就像ceejayoz建议的那样,你可以通过使用Trait来实现它。

第1步

创建一个名为Traits的文件夹,在其中创建特征类,如下所示

<?php

namespace App\Traits;

trait Lockable {

    public function lock() {
        $this->lock = 1;
        $this->save();
    }
}

第2步:

现在在模型类中导入特征,如下所示

<?php

namespace App;

use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Traits\Lockable;

class User extends Authenticatable
{
    use Lockable;
}

多数民众赞成!现在你可以像

那样调用函数
$user = \App\User::find(1);
$user->lock();

答案 1 :(得分:0)

您可以创建扩展BaseModel的{​​{1}}类,并使用Model方法扩展lock()类而不是BaseModel制作所有模型。然后,只需在Model类中定义lock()方法。