【问题标题】:Category relationship in laravel Undefined property: stdClass::laravel 未定义属性中的类别关系:stdClass::
【发布时间】:2017-07-07 22:16:02
【问题描述】:

我正在做一个 laravel 培训项目。当我尝试获取每个产品类别名称时,我遇到了模型和关系问题。
这是我的产品模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
   public function category()
   {
   return $this->belongsTo('App\Category');
   }
}

和我的类别模型

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Category extends Model
{
   protected $table = 'categories';

   public function products()
   {
      return $this->hasMany('App\Product');
   }
}

当我尝试像这样获取每个产品的类别名称时

      @foreach($products as $product)
      <tr>
        <td>{{ $product->id }}</td>
        <td>{{ $product->name }}</td>
        <td>{{ $product->category->name }}</td>
      </tr>
      @endforeach

当我运行页面时出现此错误

Undefined property: stdClass::$category (View: /var/www/html/projectname/resources/views/my/products/index.blade.php)

谁能告诉我是什么导致了这个错误?

更新
这是表结构
产品 : id , name , category_id->unsigned()
分类 : id , 姓名
这是我用来获取 $products 的代码

    $user_id = Auth::user()->id;
    $products = DB::table('products')->where('user_id', $user_id)->paginate(5);
    return view('my.products.index')->withProducts($products);

【问题讨论】:

  • 显示产品和类别的表结构,可能是外键不正确
  • @OdinThunder 我更新了帖子,请参阅表结构。然后回复我
  • 您的错误消息表明 $product 是一个对象/stdClass,而不是您的 Product 模型的实例。您可以发布用于获取$products 变量的代码吗?
  • @SaeedKarimi 我已经为你写了答案

标签: laravel relationship categories stdclass


【解决方案1】:

您的问题是您使用 Laravel 的查询构建器而不是 Eloquent,但您将结果视为 Eloquent。

当你这样做时:

$products = DB::table('products')->where('user_id', $user_id)->paginate(5);

$products 变量将包含一个Paginator 实例,其中包含您的项目作为stdClass 的实例。如果你想用 Eloquent 做到这一点,你应该尝试这样的事情:

$products = Product::with('category')->where('user_id', $user_id)->paginate(5);

这将确保分页器中返回的项目是您的 Product Eloquent 模型的实例,并预先加载了 category 关系(即,它将为使用一个查询返回的每个 Product 加载类别关系,而不是超过 5 个查询,每个 Product 一个)。

然后您应该能够访问$product-&gt;category-&gt;name

【讨论】:

  • 谢谢你,你是个天才。我不敢相信我犯了这样的错误。
猜你喜欢
  • 2020-01-28
  • 2016-12-29
  • 2019-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-20
  • 1970-01-01
相关资源
最近更新 更多