找回与laravel雄辩的关系

时间:2019-03-02 18:18:32

标签: php laravel laravel-5 eloquent

当我尝试从产品中获取类别的名称时,我发现在检索结果之前,必须使用“ 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');
    }

1 个答案:

答案 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个产品 在您的视图中,您会发现由于

Eager Loading

  

当访问口才关系作为属性时,关系数据是“延迟加载”的。这意味着直到您首次访问该属性,关系数据才被实际加载。但是,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