当我尝试从产品中获取类别的名称时,我发现在检索结果之前,必须使用“ C”而不是“ c”。但是,当我尝试获取供应商名称时,小写字母s可以正常工作。我想知道是什么导致了这种差异。同样,如果我dd($ var),则关系字段应该为空。我认为它将与我的模型中定义的关系有关。
Blade.php
<td>{{$product->Category->name}}</td>
<td>{{$product->salePrice}}</td>
<td>{{$product->stock}}</td>
<td>{{$product->supplier->company_name}}</td>
Product.php
public function category()
{
return $this->belongsTo('App\Category','category');
}
public function supplier()
{
return $this->belongsTo('App\Supplier','supplier_id');
}
Category.php
public function product()
{
return $this->hasMany('App\Product');
}
Supplier.php
public function product()
{
return $this->hasMany('App\Product');
}
答案 0 :(得分:1)
您在产品型号上缺少_id
:
public function category()
{
return $this->belongsTo('App\Category','category_id');
}
或留空
public function category()
{
return $this->belongsTo('App\Category');
}
在您的控制器
中public function index()
{
$products = Product::all()->with('category');
return view('your_view', compact('products'));
}
如果您dd
个产品
在您的视图中,您会发现由于
当访问口才关系作为属性时,关系数据是“延迟加载”的。这意味着直到您首次访问该属性,关系数据才被实际加载。但是,Eloquent可以在查询父模型时“急于加载”关系。
@foreach($products as $product)
<td>{{$product->category->name}}</td>
<td>{{$product->salePrice}}</td>
<td>{{$product->stock}}</td>
<td>{{$product->supplier->company_name}}</td>
@endforeach