0

私は3つのテーブルinventory、products、product_categoryを持っています

表:在庫

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

ここでproduct_nameは外部キーです..このテーブルには製品テーブルとの多くの関係があります

表中:製品

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

ここで type_fk_id は外部キーです。このテーブルはproduct_categoryテーブルと多くの関係があります

テーブル内: product_category

id  type_name       
1    PC            
2    oil         
3   servo_oil  

product_category テーブルに外部キーがありません

私のコントローラーで

$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 雄弁なリレーションを使用してこのデータにアクセスしたり、ビューで取得したりする方法がわかりませんモデルでhasmanyThroughproduct_category->product->inventoryを使用してアクセスする方法を知っています... hasmanythrough の逆を使用するにはどうすればよいですかinventory->product->product_category

4

2 に答える 2

2

これを試して:

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

内部図

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

以下のようにモデル関係を定義します。

アプリ\インベントリ

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

アプリ\製品

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

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

アプリ\製品カテゴリ

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

ドキュメント

于 2016-11-15T06:06:28.637 に答える
0

このようにしてみてください

外部キーでテーブルに参加する

$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(); 
于 2016-11-15T05:51:50.467 に答える