Laravel eloquent ,有多个 table

Laravel eloquent ,has many in multi table

我有三个 tables inventory,products,product_category

在 table:库存

id  product_name  quantity
1      2             24
2      2             54653
3      1             34

这里product_name是外键..这个table和product有很多关系table

在table中:产品

id  name        type_fk_id
1    pc             1
2   laptop          2
3  servo_oil        2

这里type_fk_id是外键..这个table和product_category有很多关系table

在table:product_category

id  type_name       
1    PC            
2    oil         
3   servo_oil  

product_categorytable

中没有外键

在我的控制器中

$data=Inventory::all();
return view('inv_view',compact('data'));

在inv_view视图中

@foreach($data as $inv)
{{$inv->id}}
{{$inv->qty}}

@endforeach

我想在视图部分显示产品名称和类别,这就是意思

id  quantity   product_name  category
1    34           pc           pc
2    436         servo_oil     oil

我不知道如何使用 laravel eloquent 关系访问或获取此数据 我知道如何在模型中使用 hasmanyThrough 来访问 product_category->product->inventory...我如何使用 hasmanythrough 的逆函数 那就是 inventory->product->product_category

尝试这样做

用外键加入你的table

$products = DB::table('products')
  ->join('inventory', 'products.id', '=', 'inventory.product_id')
  ->join('product_category', 'products.id', '=', 'product_category.product_id')
  ->select('products.*','product_category.category as category_name')
  ->get(); 

试试这个:

$data=Inventory::with('product.product_category')->get();
return view('inv_view',compact('data'));

Inside View

@foreach($data as $inv)
  {{ $inv->id }}
  {{ $inv->qty }}
  {{ $inv->product->name }}
  {{ $inv->product->product_category->type_name  }}
@endforeach

如下定义模型关系:

App\Inventory

public function product() {
    return $this->belongsTo('App\Product', 'product_name'); 
}

App\Product

public function inventory(){
    return $this->hasMany('App\Inventory');
}

public function product_category() {
    return $this->belongsTo('App\ProductCategory', 'type_fk_id');   
}

App\ProductCategory

public function product() {
    return $this->hasMany('App\Product');   
}

Docs