显示带有产品类别ID的类别名称 - Laravel

时间:2017-01-07 16:18:35

标签: php laravel

我已经找到了这个答案,但它对我不起作用(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)

我哪里错了?请告诉我如何解决它。

由于

2 个答案:

答案 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)]