2013-11-16 3 views
0

У меня есть следующие задачи МодельLaravel 4: Weird поведение на магически называется belongsTo отношений

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

Однако, когда я установил свои отношения в магическом образом, belongsTo отношения изломов:

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! 
} 

И следующий сломанный Query-журнал :

select `tasks`.* from `tasks` limit 1; 
select * from `users` where `users`.`id` in (0); // NOTE THE 0 INSTEAD OF 20 

У меня нет ошибок. Я пробовал то же самое с belongsToMany, но это отлично работает.

По какой-то причине '20' не переходит к отношениям, связанным с этим. Поэтому я ожидаю, что __call() запускает новый экземпляр запроса, но я не понимаю, почему?

Я заработал время, когда __call() уволен, но, кроме метода 'user', он вообще не срабатывает. Так что, насколько мне известно, это не может быть проблемой.

ответ

1

Это, вероятно, потому, что Laravel использует имя метода, в котором он находится, как внешний ключ по умолчанию. Попробуйте следующее:

return $this->belongsTo('User', 'user_id'); 
Смежные вопросы