2016-08-30 1 views
1

私の問題は、Laravel dbクエリに関するものです。通常、すべてのoopユーザは、私的なプロパティを持つ親クラスの共通変数を定義し、oopの理由 - 再利用可能性のために他の子クラスから使用します...そして今私の問題は、キー、私は元の一般的なクエリの部分を変更したくないので(私は通常の人のように)ゲッターメソッドを書くが、それは常に参照によって呼び出されています。Laravel DBクエリクエリテンプレート(値で呼び出す)

例(親クラス):

$this->userConfirmedPackageData = DB::table('payments') 
     ->join('users', 'users.id', '=', 'payments.user_id')-> 
     *.....continue with more join* 
     ->join('subjects', 'subjects.id', '=', 'classroom_subject.subject_id') 
     ->where(['payments.confirmed' => 1, 'payments.user_id' => $this->currentUser->getUserId()]); 

私は以下のように同じクラスにそれを使用する場合、クエリの共通部分は、私は私の他のすべての子クラスのクエリのためのテンプレートのようにそれを使用したいが、それを定義した後、 (子クラス):

$firstQuery = $this->getUserConfirmedPackageData()->join("aTable")->where("something.id",3)->get(["something.id"]); 
$secondQuery = $this->getUserConfirmedPackageData()->join("bTable")->where("somethingDifferentTable.user_id",1111)->take(5)->get(["somethingDifferentTable.name"]); 

私の貴重なプライベート変数は、最初のgetメソッドの後に変更されます(スタックされます)!

私は "get"と言うまでDBテーブルを終了できませんが、このような共通部分のクエリを使用する方法はありますか?説明のためにすべてのコードを書きましたが、構文エラーがあるかもしれませんが、それはロジックに関するコードではありません。ありがとう...

答えて

0

私はあなたのコードを理解している場合は、クエリオブジェクトが各呼び出しで再作成されるように、通常の方法でクエリを配置する必要があります。プロパティ($this->userConfirmedPackageData)に配置すると、getterメソッド($this->getUserConfirmedPackageData())を呼び出していても、クエリオブジェクトが再利用されます。

私は次のようなものをお勧めします:

$firstQuery = $this->userConfirmedPackageQuery()->join("aTable")->where("something.id",3)->get(["something.id"]); 
$secondQuery = $this->userConfirmedPackageQuery()->join("bTable")->where("somethingDifferentTable.user_id",1111)->take(5)->get(["somethingDifferentTable.name"]); 

public function userConfirmedPackageQuery() { 
    return DB::table('payments') 
     ->join('users', 'users.id', '=', 'payments.user_id')-> 
     // *.....continue with more join* 
     ->join('subjects', 'subjects.id', '=', 'classroom_subject.subject_id') 
     ->where(['payments.confirmed' => 1, 'payments.user_id' => $this->currentUser->getUserId()]); 
} 

は次のようにそれを使用します

関連する問題