2017-01-22 3 views
1

私は私がやりたいものを本質的には、「locked_at」と「locked_by」の列を持つテーブル/モデルのセットアップの数のようなコール何かである持っている:このメソッドは、その行をチェックしますLaravel 5グローバルモデルメソッド?

$model->lock(); 

ことではありません既にロックされている場合は、両方のセルを設定し、モデルを保存します。

それぞれのモデルの中にロックメソッドを作成できますが、それはベストプラクティスのようには見えません。メソッドを一度作成し、すべてのモデルにアクセスできるようにしたいと思います。

laravelでこれを行う方法はありますか?

+2

Laravelのように、ソフト削除のような特性を考えてみましょう。 https://laravel.com/api/5.3/Illuminate/Database/Eloquent/SoftDeletingTrait.html – ceejayoz

答えて

2

ceejayozが示唆したように、あなたはTraitを使って達成することができます。

ステップ1

トレイトというフォルダを作成し、その内部で、次の

<?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(); 
0

あなたはModelを拡張BaseModelクラスを作成し、lock()方法使用して代わりにModelBaseModelクラスを拡張するすべてのモデルを作ることができます。次にクラスでlock()メソッドを定義します。

+3

IMOの特性を使う方が良い。 – ceejayoz