Também conhecido como a propriedade da dor de cabeça sem objeto
Então; Passei um bom conjunto de horas refletindo sobre o aparente erro em meu código que estava gerando um erro “Tentando acessar propriedade de não objeto”.
Na verdade, eu já havia dado cada passo que encontrei enquanto pesquisava no Google e me encontrava em um beco sem saída.
A premissa
Eu estava ansioso para carregar este relacionamento (o que é uma boa prática para economizar tempo de processamento), mas não consegui acessar a propriedade ao tentar exibi-la.
Minha situação era um pouco diferente da maioria das que encontrei; em meu modelo eloquente , tive relacionamentos semelhantes aos quais me referi como:
// this worked fine when called
// it refers to an objects "origin" which is a country
public function origin()
{
return $this->belongsTo('Country', 'origin_id');
}
// this didn't work
// it refers to an optional alternative "origin"
public function alt_origin()
{
return $this->belongsTo('Country', 'alt_origin_id');
}
Como você pode sem dúvida ver, as funções fazem exatamente a mesma coisa (ids diferentes sendo referenciados à parte), mas um funcionou enquanto o outro não … De fato, confuso.
O que estava errado? AKA Como consertar.
Basicamente, L4 não parece gostar de nomes de função de relacionamento definidos usando Snake Case . Uma correção para o seguinte usando Camel Case resolveu todos os meus problemas com aquela segunda função incômoda.
public function altOrigin()
{
return $this->belongsTo('Country', 'alt_origin_id');
}
Espero ter salvado alguém algum tempo 🙂