web-dev-qa-db-fra.com

Laravel Appartient à une relation - Essayer d'obtenir la propriété de non-objet

User.php

class User extends Authenticatable
{
    public function company() {
        return $this->belongsTo('App\Company');
    }
}

Company.php

class Company extends Model
{
    public function users() {
        return $this->hasMany('App\User');
    }
}

Utilisateurs de la table

nom d'utilisateur sociétés_id

Entreprises de table

nom d'utilisateur 

J'essaie d'obtenir le nom de la société associée à l'utilisateur.

$user = User::findOrFail(Auth::user()->id);
$companyName = $user->company()->first()->name;

J'ai eu ce message d'erreur Trying to get property of non-object

Je ne comprends pas ce qui me manque ... Merci d'avance

6
Léo Coco

Par défaut, Eloquent prend le nom de la relation + '_id' pour deviner la clé étrangère.

Solution A

public function company() {
    return $this->belongsTo('App\Company', 'companies_id')
}

Solution B

public function companies() {
    return $this->belongsTo('App\Company')
}
5
Léo Coco

En outre, il peut être nul votre champ company_id

Cette raison, vous devez vérifier votre terrain sur la boucle

f.e

foreach($users as $user) 
{
   if(isset($user->company->title)): 

     echo  $user->company->title;
   else:

     echo 'empty';
   endif;

}
2
Turan Zamanlı

Essayez-le sans la "première" méthode.

$companyName = $user->company()->name;
0
brunohdaniel