문제

다음과 같은 작업 모델이 있습니다

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');
.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top