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 表中获取数据时,它将返回categoriesproduct 数据。

根据您给定的链接:http://pastebin.com/U3FAtcsK,您的$data 变量包含这种类型的层次结构。

category 
  subcategories
    products
      prices
      image

您正在尝试显示image 数组的数据。

你必须像这样获取image 数据。

$categories->subcategories->product->image->thumbnail

了解您的阵列层次结构。你没有错。 :)

【讨论】:

以上是关于Laravel 关系工作,但显示它-> 试图获取非对象的属性的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Auth::user() 关系

路线存在但不起作用,删除的路线仍然有效 Laravel

错误无法在laravel中工作并在数据库中给出列错误

数据透视表的laravel关系问题

如何在我的输入中显示上传的图像路径(laravel)

Laravel Eloquent,仅选择存在关系的行