laravel 未定义 属性 中的类别关系:stdClass::
Category relationship in laravel Undefined property: stdClass::
你好我正在做一个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)
谁能告诉我是什么导致了这个错误?
更新
这是 table 结构
产品 : id , name , category_id->unsigned()
类别 : id , name
这是我用来获取 $products
的代码
$user_id = Auth::user()->id;
$products = DB::table('products')->where('user_id', $user_id)->paginate(5);
return view('my.products.index')->withProducts($products);
您的问题是您使用的是 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->category->name
。
你好我正在做一个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)
谁能告诉我是什么导致了这个错误?
更新
这是 table 结构
产品 : id , name , category_id->unsigned()
类别 : id , name
这是我用来获取 $products
$user_id = Auth::user()->id;
$products = DB::table('products')->where('user_id', $user_id)->paginate(5);
return view('my.products.index')->withProducts($products);
您的问题是您使用的是 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->category->name
。