Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Laravel pertence a lançar erro indefinido


Depois de ajudar pelo chat, o problema era que havia uma coluna existente chamada group , e o método de relacionamento também foi chamado de group , portanto, o valor da coluna da tabela estava tendo precedência sobre o método de relacionamento.

Renomeando o método de relacionamento ou o group coluna para algo como group_id são soluções adequadas (sugiro o group_id rota).

Resposta original:

Você recupera o grupo por meio de uma propriedade mágica, não diretamente do método.
echo User::find(1)->group->name;

Se você recuperar o group() método, ele retornará o objeto de relacionamento, não realizará nenhuma consulta e buscará o objeto de relacionamento.

Além disso, o Eloquent fará suposições sobre quais são os nomes das colunas da chave estrangeira. Group traduziria automaticamente para um group_id coluna. Se você tiver uma coluna existente chamada group , você deve especificar isso explicitamente em seu relacionamento:
public function group () 
{
    return $this->belongsTo('Group', 'group');
}

Se você receber um erro "Tentando obter propriedade de não objeto" para a propriedade group , seu relacionamento não está retornando nenhum resultado ($user->group será NULL ). Nesse ponto, você deve certificar-se de que seu relacionamento está configurado corretamente (por exemplo, usando o belongsTo, hasOne, hasMany etc.) correto e garantir que você realmente tenha uma entrada relacionada em seu banco de dados.