无法访问 blade 文件中的 laravel eloquent 属性

Can't access laravel eloquent property in blade file

我正在通过以下方式从控制器检索数据:

public function show($id)
{
     $news = News::select('id','heading', 'body', 'image','category')->with('newsCategory')->where('id', $id)->first();
     return view('pages.news_details')->with('news', $news);
}

新闻模特是

public function newsCategory()
{
   return $this->belongsTo(Category::class, 'category');
}

我得到了成功的回复

{"id":1,"heading":"Fugiat veniam nons.",
"body":"lorem ipsum dolor sit amet",
"image":null,
"category":4,
"news_category":{"id":4,"title":"health care","created_at":null,"updated_at":null}}

但是,我试图在 blade 文件中访问它。除 news-category 外,所有属性均可访问。这是我尝试访问它的方式

$news->news_category->title

dd($news->toArray()) returns

但它不起作用。我怎样才能以这种方式访问​​ 属性?

如评论中所述,您正在尝试访问错误的 属性。

在您的 News 模型中,您定义了 属性 newsCategory 而不是 news_category。所以 属性 news_category 不存在。

将 Blade 视图中的代码切换为

$news->newsCategory->title

...那么应该可以了。

将模型转换为数组或 json 时,laravel 将关系名称转换为 snake case。这就是为什么它显示为 news_category.

在您的 blade 文件中,您仍在处理 eloquent 对象,因此它尚未转换为 snake case。因此,在您的 php 代码中,您需要以 newsCategory 的形式访问它,因为这就是关系的定义方式。

您可以使用模型上的 static snakeAttributes 属性 来控制此行为。

   \**
     * Indicates whether attributes are snake cased on arrays.
     *
     * @var bool
     */
    public static $snakeAttributes = false;