我该如何解决“试图获取非对象的属性”

Posted

技术标签:

【中文标题】我该如何解决“试图获取非对象的属性”【英文标题】:how can i fix "Trying to get property of non-object" 【发布时间】:2020-02-23 06:41:24 【问题描述】:

我的网站上有一个用户最喜欢的列表,他们可以将他们最喜欢的房子添加到愿望列表中

一切顺利,但他看不到愿望清单页面,错误如下:

试图获取非对象的属性“图像”

这是我的关系

class Home extends Model

  protected $guarded = [];
  public function favorite() 
  
    return $this->hasMany(favorite::class,'house_id');
  


class favorite extends Model

  protected $guarded = [];
  public function house()
  
    return $this->belongsTo(home::class);
  

我在控制器中的索引函数:

public function index()

   $favorite = favorite::where('user_id',auth()->user()->id)->get();
   return view('favorite.index',compact('favorite'));

我的索引:

@foreach($favorite as $fav)

  <tr>
    <td>
      <a href="property-detail.html"><img src="$fav->home->image" 
                                                                            ></a>
      </td>
      <td><a href="property-detail.html">$fav->home->title</a></td>
      <td>خانه خانواده</td>
      <td>اجاره</td>
      <td>
        <div class="price"><span>number_format($fav->home->price)</span><strong>تومان</strong>
        </div>
      </td>
      <td>
        <a href="#" class="action-button"><i class="fa fa-ban"></i> <span>حذف</span></a>
      </td>
    </tr>
  @endforeach

【问题讨论】:

您的所有用户都有这个问题,还是只有 1 个?因为如果只有 1 个用户有这个问题,你需要验证 db 中与该用户收藏相关的所有数据是否正确。如果每个用户都有这个问题,那么您需要测试关系。如果是后者,您可以使用php artisan tinker 并使用App\favorite::whereUserId($someID)-&gt;first()-&gt;house()-&gt;get() 之类的代码,其中$someID 是用户ID。目标是看看你是否得到了有效的结果。 【参考方案1】:

您正在尝试访问名称错误的关系。你定义了名字house的关系:

public function house()

    return $this->belongsTo(home::class);

所以你需要使用这个名字来访问:

@foreach($favorite as $fav)
    <tr>
        <td>
            <a href="property-detail.html"><img src="$fav->house->image"  ></a>
        </td>
        <td><a href="property-detail.html">$fav->house->title</a></td>
        <td>خانه خانواده</td>
        <td>اجاره</td>
        <td>
            <div class="price"><span>number_format($fav->house->price)</span><strong>تومان</strong>
            </div>
        </td>
        <td>
            <a href="#" class="action-button"><i class="fa fa-ban"></i> <span>حذف</span></a>
        </td>
    </tr>
@endforeach

但是如果house 关系为空,您也会遇到问题。为避免您可以使用@Mohammed Aktaa 提出的解决方案:

optional($fav->house)->title

【讨论】:

【参考方案2】:

首先你最喜欢的模型没有家庭关系,你的关系就是房子,当你想获得它的价值时,你可以使用optional这样的辅助函数:

optional($fav->house)->title

【讨论】:

而且您也没有向房屋添加数据以将其与最喜欢的模型相关联

以上是关于我该如何解决“试图获取非对象的属性”的主要内容,如果未能解决你的问题,请参考以下文章

我只是更改了文本编辑器,所以这个错误没有解决方案。 ---->试图获取非对象的属性“id”

如果显示错误为“试图获取非对象的属性”,如何识别代码中的非对象?

如何修复“试图获取非对象的属性”Laravel 5

试图获取非对象的属性 [laravel 5.2]

Blade - 试图获取非对象的属性

试图获取非对象的属性