2014-09-21 3 views
0

hasManyThrough 관계를 처음 사용하려고합니다. 그러나 메서드를 호출하려고하면 아무 것도 반환하지 않습니다. 여기Laravel hasManyThrough returns nothing

User: 
- id 
- (...) 

Shipment: 
- id 
- users_id 
- (...) 

Shipment_question: 
- id 
- shipment_id 
- (...) 

그리고 내 모델의 코드는 다음과 같습니다

여기 내 데이터베이스입니다.

사용자 :

public function Shipment() 
{ 
    return $this->hasMany('Shipment','users_id'); 
} 

public function Shipment_question(){ 
    return $this->hasManyThrough('Shipment_question','Shipment','users_id','shipment_id'); 
} 

선적 :

Shipment_question
public function User() 
{ 
    return $this->belongsTo('User','users_id'); 
} 

public function Shipment_question() 
{ 
    return $this->hasMany('Shipment_question','shipment_id'); 
} 

:

Auth::User()->Shipment_question; 
,691 : 여기

public function Shipment() 
{ 
    return $this->belongsTo('Shipment','shipment_id'); 
} 

그리고는 호출입니다

barryvdh 디버그 막대를 사용하여 쿼리를 보았습니다. shipment_question 호출은 쿼리를 생성해야하지만 쿼리 로그에는 auth :: user 쿼리 만 나타납니다.

답변

1

관계, 순서, 동적 특성을 작업 camelCased해야합니다, 그래서 이름을 변경에서 : 그렇지 않으면 당신이 할 수있는 유일한 방법

Auth::user()->simpmentQuestion; 

:

public function Shipment_question(){ 
    return $this->hasManyThrough('Shipment_question','Shipment','users_id','shipment_id'); 
} 

//to 
public function shipmentQuestion(){ 
    return $this->hasManyThrough('Shipment_question','Shipment','users_id','shipment_id'); 
} 

는 당신이 그것을 호출 할 수 있습니다 그것과 함께 일하는 것은 직접적으로 방법이라고 부릅니다 :

Auth::User()->Shipment_question()->getResults(); 

// what gives the same result as dynamic property after fix: 
Auth::User()->shipmentQuestion; 

일반적으로 Laravel4 + 명명 규칙은 camelCased 메서드 및 속성과 StudlyCased 클래스를 사용하여 (위와 같거나 적어도 다른 경우에는 좋습니다) 강제 적용합니다.

따라서 Shipment_question 클래스의 이름을 ShipmentQuestion으로 변경하는 것이 좋습니다.

+0

엄청난 것이 문제를 해결합니다. 나는 낙타의 관례가 단지 그것, 관례, laravel의 기능적 측면이 아니라고 생각합니다. 고맙습니다. – JRivera294

+1

일반적으로 그것은 단지 대회 일뿐입니다. 그러나 이런 경우에, Eloquent 기능을 활용하면 작동 방식을 알아야합니다. –