无法访问 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;
我正在通过以下方式从控制器检索数据:
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;