I'm trying to echo out the name of the user in my article and I'm getting the
ErrorException: Trying to get property of non-object
. My codes:
Models
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
table
users
table
news
Controller
public function showArticle($slug)
{
$article = News::where('slug', $slug)->firstOrFail();
return view('article', compact('article'));
}
Blade
{{ $article->postedBy->name }}
When I try to remove name in the blade
{{ $article->postedBy }}
it outputs the id
, but when I try to add the ->name there it says Trying to get property of non-object
but I have a field name
in my table and a User
model. Am I missing something?
Answer:
I got it working by using Jimmy Zoto's answer and adding a second parameter to my
belongsTo
. Here it is:
First, as suggested by Jimmy Zoto, my code in blade from
$article->poster->name
to $article->poster['name']
. Next is to add a second parameter in my belongsTo
, from return $this->belongsTo('App\User');
to return $this->belongsTo('App\User', 'user_id');
in which user_id
is my foreign key in the news table.
Thanks for all your help!