2016-08-30 3 views
1

내 문제는 Laravel db 쿼리에 관한 것입니다. 일반적으로 모든 oop 사용자는 개인 속성을 가진 부모 클래스에서 자신의 공통 변수를 정의하고 oop 이유 - 재사용 가능성 때문에 다른 자식 클래스에서 사용합니다. 이제는 개인적으로 DB 쿼리를위한 변수를 정의 할 때입니다. 키, 내가 원래의 일반적인 쿼리 부분을 변경하고 싶지 않기 때문에 (정상적인 사람처럼) getter 메소드를 작성하지만 항상 참조로 호출합니다.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())를 호출하더라도 쿼리 개체가 다시 사용됩니다.

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()]); 
} 

이 좋아 사용 : :

$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"]); 

나는 다음과 같은 것을 권 해드립니다