2015-09-09 11 views
11

Sto cercando di echeggiare il nome dell'utente nel mio articolo e sto ricevendo il ErrorException: Trying to get property of non-object. I miei codici:Cercando di ottenere la proprietà di non oggetto - Laravel 5

Modelli

1. News 

    class News extends Model 
    { 
     public function postedBy() 
     { 
     return $this->belongsTo('App\User'); 
     } 
     protected $table = 'news'; 
     protected $fillable = ['newsContent', 'newsTitle', 'postedBy']; 
    } 

2. User 

    class User extends Model implements AuthenticatableContract, 
           AuthorizableContract, 
           CanResetPasswordContract 
    { 
     use Authenticatable, Authorizable, CanResetPassword; 

     protected $table = 'users'; 

     protected $fillable = ['name', 'email', 'password']; 

     protected $hidden = ['password', 'remember_token']; 

    } 

schema

tavolo users

enter image description here

tavolo news

enter image description here

controller

public function showArticle($slug) 
    { 
     $article = News::where('slug', $slug)->firstOrFail(); 
     return view('article', compact('article')); 
    } 

lama

{{ $article->postedBy->name }} 

Quando provo a rimuovere il nome nella lama {{ $article->postedBy }} emette il id, ma quando provo ad aggiungere il -> nome lì dice Trying to get property of non-object ma ho un campo name nella mia tabella e un modello User. Mi sto perdendo qualcosa?

+0

Puoi 'print_r ($ article);'? – aldrin27

+0

@ aldrin27 print_r direttamente nel mio controller? beh, in realtà tutto funziona, ottengo ogni campo ma non riesco a ottenere la relazione. Mi dà l'errore – FewFlyBy

+0

È necessario tenerlo all'interno della lama. – aldrin27

risposta

23

La query restituisce array o oggetto? Se lo scarichi, potresti scoprire che si tratta di un array e tutto ciò di cui hai bisogno è un accesso array ([]) invece di un accesso a un oggetto (->).

+0

Grazie. Funziona e devo aggiungere un secondo parametro nella mia proprietà. Nel modello News. – FewFlyBy

+0

Tahnks molto: DDD –

7

Ho funzionato usando la risposta di Jimmy Zoto e aggiungendo un secondo parametro al mio belongsTo. Eccolo:

Innanzitutto, come suggerito da Jimmy Zoto, il mio codice in blade da $article->poster->name a $article->poster['name']. Successivamente è necessario aggiungere un secondo parametro nel mio belongsTo, da return $this->belongsTo('App\User'); per restituire $this->belongsTo('App\User', 'user_id'); in cui user_id è la mia chiave esterna nella tabella delle notizie.

Grazie per tutto il vostro aiuto!

0

Ho implementato una relazione hasOne nella mia classe genitore, definito sia la chiave esterna che quella locale, ha restituito un oggetto ma è necessario accedere alle colonne del figlio come una matrice.
$parent->child['column']
Tipo di confusione.