2016-09-08 17 views
1

私はクエリと繰り返しコードを作成していますが、これを雄弁なモデルに組み込む方法はありますか?Laravel Custom Eloquent Method

特定の通貨を選択しているTransactionのモデルがあります。これをモデルにどのように追加できますか?私はこれを行うことができようにするため

Transaction::select('*')->where('currency', '=', 'GBP') 

Transaction::select('*')->currency('GBP') 

が次にモデルで、それは何らかの形でクエリに追加し、これを変更する方法はあります。 Transaction::currencyを作成しようとしましたが、動作しませんでした。これは単なる例であり、いくつかのセレクタを追加してコードをきれいに保つことを計画しています。

class Transaction extends Model 
{ 
    protected $table = 'transactions'; 


    public function currency($query, $currency) { 
     return $query->where('currency', '=', $currency); 
    } 
} 
+0

など、このスコープを使用したファイル

public function scopeCustom($query, $column, $exp, $value) { return $query->where('votes', $exp, $value); // ('currency', '=', 'GBP') } 

をTransaction.phpするためにこれらのコードを追加します。トランザクションサービスを作成し、テーブルからデータを取得するためにそこにあなたのクエリを記述します。 – Komal

答えて

1

Laravelはクエリスコープと呼ばれるようなものがあります。それはあなたが望むものを正確に行うことを可能にします。あなたは、このような範囲のキーワードを使用してcurrency()メソッドの前に付ける必要があります。

class Transaction extends Model 
{ 
    protected $table = 'transactions'; 


    public function scopeCurrency($query, $currency) { 
     return $query->where('currency', '=', $currency); 
    } 
} 

次にあなたがこのTransaction::select('*')->currency('GBP')

あなたはスコープを使用してこれを行うことができますスコープhere

+0

パーフェクト;私はそこに正しい道があることを知っていた。ありがとうございました – Callum

1

ほとんど完了しているので、通貨方法をクエリスコープとして記述する必要があります。あなたが詳細については、この

Transaction::select('*')->currency('GBP') 

のようなスコープを使用することができることをやった後

public function scopeCurrency($query, $currency) { 
    return $query->where('currency', '=', $currency); 
} 

はここに行くhttps://laravel.com/docs/5.2/eloquent#local-scopes

0

についてお読み行うことができます。

は今

Transaction::select('*')->custom('currency', '=', 'GBP'); 
Transaction::select('*')->custom('amount', '>', 1000);