Laravel 关系工作,但显示它-> 试图获取非对象的属性
Posted
技术标签:
【中文标题】Laravel 关系工作,但显示它-> 试图获取非对象的属性【英文标题】:Laravel Relationship working, but showing it -> Trying to get property of non object 【发布时间】:2017-01-21 02:01:36 【问题描述】:在我的控制器中,我有:
public function showMainPage()
$categories = Category::with('subcategories.products.prices', 'subcategories.products.image')->get();
$data = array(
"categories" => $categories,
);
return view('index')->with($data);
当我在我的视图中这样引用它时:
@foreach($subcategory->products as $product)
<img src=" $product->image->thumbnail " >
我收到 Trying to get property of non-object
错误。
这是我的关系:
Product.php
public function image()
return $this->belongsTo('App\ProductImage');
这是我的 ProductImage 关系:
public function product()
return $this->belongsTo('App\Product');
那里有什么问题?
【问题讨论】:
两个关系都有一个belongTo
,这是不对的。产品应该是hasMany
。
@Scarwolf 在您看来,您似乎得到的是一个数组而不是一个集合。请您使用$product['image']['thumbnail']
进行检查
安德鲁:哦,你说得对。将其更改为 hasOne,但仍然相同。 (每个产品 1 个图像行)。 @jaysingkar 那行得通。为什么 laravel 会返回一个数组呢?我怎样才能把它改回一个集合......?
对不起@Scarwolf 我不确定。但是,您可以尝试直接传递$categories
,而不将其添加到$data
数组中。
使用with
可能会覆盖您的人际关系。如果您一直有关系,请尝试仅使用 Categories::all()
,然后通过关系访问所有内容。
【参考方案1】:
根据您的问题,您加入了两个有关系的表。当您从categories
表中获取数据时,它将返回categories
和product
数据。
根据您给定的链接:http://pastebin.com/U3FAtcsK,您的$data
变量包含这种类型的层次结构。
category
subcategories
products
prices
image
您正在尝试显示image
数组的数据。
你必须像这样获取image
数据。
$categories->subcategories->product->image->thumbnail
了解您的阵列层次结构。你没有错。 :)
【讨论】:
以上是关于Laravel 关系工作,但显示它-> 试图获取非对象的属性的主要内容,如果未能解决你的问题,请参考以下文章