Laravel4:Comportamento estranho no relacionamento magicamente chamado de "pertenceTo"

StackOverflow https://stackoverflow.com//questions/20018719

  •  21-12-2019
  •  | 
  •  

Pergunta

Eu tenho o seguinte modelo de tarefa

class Task extends Eloquent {
    public function user()
    {
        return $this->belongsTo('User');
    }
}

Quando eu ligo:

$task = Task::with('user')->first();

Obtenho o seguinte resultado esperado:

{
    id      : 10,
    user_id : 20,
    user    : {
        id      : 20
    }
}

E o seguinte log de consulta esperado:

select `tasks`.* from `tasks` limit 1;
select * from `users` where `users`.`id` in (20);

No entanto, quando eu defino meu relacionamento de uma forma mágica, o relacionamento pertence a se rompe:

class Task extends Eloquent {
    public function __call($name, $arguments)
    {
        if ($name === 'user')
            return $this->belongsTo('User');

        return parent::__call($name, $arguments);
    }
}

Eu recebo o seguinte resultado quebrado:

{
    id      : 10,
    user_id : 20,
    user    : null // USER IS MISSING!
}

E o seguinte log de consulta quebrado:

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

Não recebo nenhum erro.Eu tentei a mesma coisa com belongsToMany, mas isso funciona perfeitamente.

Por alguma razão, o '20' não é passado para o relacionamento pertence a.Portanto, espero que __call() esteja iniciando uma nova instância de consulta, mas não entendo por quê.

Eu registrei as vezes que __call() foi disparado, mas além do método 'user', ele não parece ter sido disparado.Então, que eu saiba, esse não pode ser o problema.

Foi útil?

Solução

Provavelmente porque o Laravel usa o nome do método dentro dele como chave estrangeira padrão.Experimente isto:

return $this->belongsTo('User', 'user_id');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top