Laravel 4 : 마술 적으로 억류 된 속보 관계에 대한 이상한 행동
문제
다음과 같은 작업 모델이 있습니다
class Task extends Eloquent {
public function user()
{
return $this->belongsTo('User');
}
}
.
전화 할 때 :
$task = Task::with('user')->first();
.
다음과 같은 예상 결과를 얻습니다 :
{
id : 10,
user_id : 20,
user : {
id : 20
}
}
.
및 다음 예상 쿼리 로그 :
select `tasks`.* from `tasks` limit 1;
select * from `users` where `users`.`id` in (20);
.
그러나 마법의 방식으로 나의 관계를 설정할 때,
class Task extends Eloquent {
public function __call($name, $arguments)
{
if ($name === 'user')
return $this->belongsTo('User');
return parent::__call($name, $arguments);
}
}
.
다음과 같은 부러진 결과를 얻습니다 :
{
id : 10,
user_id : 20,
user : null // USER IS MISSING!
}
.
및 다음과 같은 쿼리 로그 :
select `tasks`.* from `tasks` limit 1;
select * from `users` where `users`.`id` in (0); // NOTE THE 0 INSTEAD OF 20
.
나는 오류가 발생하지 않는다.belongsToMany
와 동일한 일을 시도했지만 완벽하게 작동합니다.
어떤 이유로 '20'이 ervingSto 관계에 전달되지 않습니다.따라서 __call ()이 새로운 쿼리 인스턴스를 실행하는 것으로 기대하지만 이유를 이해하지 못합니다.
나는 __call ()이 해고되기 시작하지만 '사용자'방법 외에도, 그것은 전혀 해고되는 것처럼 보이지 않는다.그래서 문제가 될 수없는 내 지식에.
해결책
LARAVLES는 기본 외부 키로 내부의 메소드의 이름을 사용하기 때문일 것입니다.이것을 시도하십시오 :
return $this->belongsTo('User', 'user_id');
. 제휴하지 않습니다 StackOverflow