尝试从新闻文章中回显用户名失败,导致以下错误:
ErrorException: Trying to get property of non-object
模型
class News extends Model { public function postedBy() { return $this->belongsTo('App\User'); } } class User extends Model { protected $fillable = ['name', ...]; }
架构
控制器
public function showArticle($slug) { $article = News::where('slug', $slug)->firstOrFail(); return view('article', compact('article')); }
Blade Template
{{ $article->postedBy->name }}
发生错误是因为控制器中的查询 (News::where('slug' , $slug)->firstOrFail()) 返回一个数组,而不是一个对象。尝试访问数组上的 ->postedBy 时,无法识别该属性并抛出错误。
要解决此问题,需要在访问 ->postedBy 之前将数组转换为对象财产。这可以通过在 News 模型上使用 findBySlug 方法而不是 firstOrFail() 来完成:
public function showArticle($slug) { $article = News::findBySlug($slug); // Returns an object return view('article', compact('article')); }
这将允许您成功访问对象上的 ->postedBy 属性并在中显示用户名Blade 模板。
以上是为什么在 Laravel 5 新闻文章中访问用户名时出现'尝试获取非对象的属性”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!