2014-11-27 2 views
3

다음 모델을 가지고 있습니다. 내가 DB::getQueryLog를 사용하여 budgetById 방법을 디버깅 할 때laravel belongsstomany with condition

class Training extends \Eloquent { 

    // Add your validation rules here 
    public static $rules = [ 
     'name' => 'required', 
     'city' => 'required', 
     'province' => 'required', 
     'budget_year' => 'required|integer', 
     's_date' => 'required|date', 
     'e_date' => 'required|date' 
    ]; 

    // Don't forget to fill this array 
    protected $fillable = [ 
     'name', 
     'city', 
     'province', 
     'budget_year', 
     's_date', 
     'e_date' 
    ]; 

    public function material(){ 
     return $this->hasMany('Material'); 
    } 

    public function budget(){ 
     return $this->belongsToMany('Budget')->withPivot('amount'); 
    } 

    public function budgetById($training_id){ 
     $this->belongsToMany('Budget')->where('training_id', '=', $training_id)->get(); 
    } 

} 

, 쿼리가 0 행을 반환

select budgets.*, 
budget_training.training_id as pivot_training_id, 
budget_training.budget_id as pivot_budget_id 
from budgets inner join budget_training on budgets.id = budget_training.budget_id 
where budget_training.training_id is null and training_id='6' 

을 다음과 같다,하지만 난 쿼리를 수정하고, pgadmin에서 다음 스크립트를 실행하려고 할 때 잘 작동합니다.

select budgets.*, 
budget_training.training_id as pivot_training_id, 
budget_training.budget_id as pivot_budget_id 
from budgets inner join budget_training on budgets.id = budget_training.budget_id 
where budget_training.training_id='6' 

유의 사항 laravel generated query에서 training_id is null and을 제거합니다. 내 budgetById 메소드의 문제점은 무엇입니까?

답변

4

당신은 get()라고하고 여기 return을 사용하지 않은 :

public function budgetById($training_id){ 
    // = in where is optional in this case 
    $this->belongsToMany('Budget')->where('training_id', '=', $training_id); 
} 

을 당신은 다음과 같이 사용한다 :

public function budgetById($training_id){ 
    // = in where is optional in this case 
    return $this->belongsToMany('Budget')->where('training_id', '=', $training_id); 
} 
+6

당신은'필요가 없다 ='단지 2 매개 변수가있는 것처럼 '()','='이 함축되어있다. – Webnet

+0

동의 @Webnet :-) –