Relacionamentos ORM do Laravel 4 Eloquent

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 🙂