2017-07-18 3 views
0

Das ist mein User-Modell:Rückkehr String, wenn das Objekt leer in Laravel 5,4

/** 
* The settings that belong to the user. 
*/ 
public function settings() 
{ 
    return $this->hasMany(Setting_user::class); 
} 

/** 
* Get user's avatar. 
*/ 
public function avatar() 
{ 
    $avatar = $this->settings()->where('id',1); 

    if(count($this->settings()->where('id',1)) == 0) 
    { 
     return "default-avatar.jpg"; 
    } 

    return $this->settings()->where('id',1); 
} 

Aus meiner Sicht bin ich den Wert wie das Zugreifen auf:

Wenn der Benutzer einen Avatar alles hat ist gut. Aber, wenn sie leer ist die Methode Avatar() gibt einen String und ich erhalte den folgenden Fehler:

Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation (View: C:\xampp\htdocs\laravel\laravel-paper-dashboard\resources\views\dashboard\user-profile.blade.php) 

Antwort

2

Vielleicht möchten Sie einen Eloquent Accessor stattdessen verwenden.

public function getAvatarAttribute() { 
    $avatar = $this->settings()->where('id',1)->first(); // Changed this to return the first record 

    if(! $avatar) 
    { 
     return "default-avatar.jpg"; 
    } 

    // You will need to change this to the correct name of the field in the Setting_user model. 
    return $avatar->the_correct_key; 
} 

Dies ermöglicht es Ihnen dann Auth::user()->avatar in Ihre Vorlagen zu nennen.

Sonst denkt Eloquent, dass Sie versuchen, eine Beziehung zu bekommen.

+0

Hallo Josh, das habe ich zuerst gemacht, aber ich hatte den gleichen Fehler. – Marco

+0

Haben Sie die ursprüngliche 'avatar()' Methode aus dem Benutzermodell entfernt/ersetzt? – Josh

+1

Es funktioniert jetzt danke! – Marco