我已经找到了这个答案,但它对我不起作用(Laravel - displaying categories by id)
我无法在产品列表页面中显示类别名称。
我的数据库:
类别:CategoryID,CategoryName
产品:ProductID,Name,Des,ProductCategoryID
产品型号:
protected $table ='products';
protected $primaryKey = 'ProductID';
public $timestamps = false;
public function Category(){
return $this->belongsTo('App\Category','ProductID','CategoryID');
}
类别模型:
protected $table = 'productcategories';
public function Product(){
return $this->hasMany('App\Product','ProductCategoryID','ProductID');
}
我的控制器:
public function danhsachsanpham(){
$sanpham = Product::all();
return view('admin/products/danhsach', ['sanpham'=> $sanpham]);
}
我的观点:
<table class="table table-striped table-bordered table-hover" id="dataTables-example">
<thead>
<tr align="center">
<th>ID</th>
<th>Name</th>
<th>Description</th>
<th>Category Name</th>
</tr>
</thead>
<tbody>
<?php foreach ($sanpham as $sp): ?>
<tr class="odd gradeX" align="center">
<td>{{$sp->ProductID}}</td>
<td>{{$sp->ProductName}}</td>
<td>{{$sp->ProductLongDesc}}</td>
<td>{{$sp->ProductCategoryID->CategoryName}}</td>
</tr>
<?php endforeach ?>
</tbody>
</table>
我得到一个错误:
Trying to get property of non-object (View: C:\xampp\htdocs\banhang\resources\views\admin\products\danhsach.blade.php)
我哪里错了?请告诉我如何解决它。
由于
答案 0 :(得分:3)
您可以通过Category()
关系方式获得 CategoryName :
<td>{{$sp->Category()->first()->CategoryName}}</td>
或更短:
<td>{{$sp->Category->CategoryName}}</td>
编辑:您的关系方法使用了错误的外键。尝试:
产品型号:
public function Category()
{
return $this->belongsTo('App\Category', 'ProductCategoryID', 'CategoryID');
}
类别模型(注意方法的多个命名:产品 s ):
public function Products()
{
return $this->hasMany('App\Product', 'ProductCategoryID');
}
答案 1 :(得分:0)
我想根据 Laravel 8 更新答案。
产品型号:
df1 <- structure(list(id = c(1, 1, 2, 3, 4, 4), sex = c("---", "m",
"f", "m", "---", "f"), age = c(20, NA, 25, 23, NA, 18), height = c(NA,
180, 175, 168, 176, NA), weight = c(68, NA, 65, 68, NA, NA)),
class = "data.frame", row.names = c(NA,
-6L))
类别模型:
[*filter(int.__instancecheck__, lst)]