2016-07-12 3 views
1

私は現在3つのデータベーステーブルを持っていると思いますので、このようなモデル: Laravel:これらの異質な関係を定義し、それらをすべて1つのビューに渡す方法は?

証券Yにおける製品Xの

  • 証券
  • 製品
  • 額は今のところ私は「3つのモデルを持っています「StockProducts」および「StockProductsAmount」を含む。 StockProductsAmountには、StockProductsおよびStockProductsAMountのIDに2つの外部キーがあります。

    どのように関係を定義する必要がありますか? App \ StockProductsAmountでは、私はすでにこれを定義した:

    class StockProductsAmount extends Model 
    { 
        public function stock() { 
         return $this->hasOne('App\Stock'); 
        } 
        public function stockproduct() { 
         return $this->hasOne('App\StockProducts'); 
        } 
    } 
    

    は私もどこか他のhasMany -Relationshipを定義する必要はないのですか?しかしここで?

    また、3つのテーブルの値に1つのビューでアクセスするにはどうすればよいですか。

    これは私が今持っているものです。コメントアウトされた値は、私がEloquent関係を定義した後に始めたものです。

    public function stockOverview() 
        { 
         $products = StockProducts::all(); 
         $stocks = Stock::all(); 
         $amounts = StockProductsAmount::all(); 
    
         //$stock = StockProductsAmount::all()->with('stock')->with('stockproducts'); 
    
         $data = array(
          'stocks' => $stocks, 
          'products' => $products, 
          'amount' => $amounts 
         ); 
         return view('stock.overview')->with($data); 
        } 
    

    ありがとうございます。

    編集:テーブルの構造:

    株式:

    Schema::create('stocks', function (Blueprint $table) { 
          $table->increments('id'); 
          $table->string('name'); 
          $table->string('color1'); 
          $table->string('color2'); 
          $table->timestamps(); 
    }); 
    

    Stock_Products:

    Schema::create('stock_products', function (Blueprint $table) { 
          $table->increments('id'); 
          $table->string('name'); 
          $table->timestamps(); 
         }); 
    

    証券商品金額:あなたのテーブルstructurに基づいて

    Schema::create('stock_products_amounts', function (Blueprint $table) { 
          $table->increments('id'); 
          $table->integer('fk_stock')->unsigned(); 
          $table->foreign('fk_stock')->references('id')->on('stocks'); 
          $table->integer('fk_stockproduct')->unsigned(); 
          $table->foreign('fk_stockproduct')->references('id')->on('stock_products'); 
          $table->integer('amount'); 
          $table->timestamps(); 
         }); 
    
+0

ストックXに複数の商品Xが存在することはできますか? – TheFallen

+1

関係の理解を深めるためにテーブルの構造を共有することができます。 –

+0

@ TheFallenすべての在庫はX製品を持つことができ、すべての製品は金額テーブルに入れることができます。したがって、すべての製品はすべての在庫に含めることができます。 – Scarwolf

答えて

0

eは、それが思わテーブル - Stock_Products_Amountは、両方のテーブルのid値を格納するピボットテーブルとして働く - 株式Stock_Products は、テーブルと多対多の関係を持っています。

証券取引モデル - -

public function Products() { 
     return $this->belongsToMany('App\Products', 'Stock_Products_Amount ', 'fk_stock', 'fk_stockproduct'); 
     //     Product Model^ name of pivot table^
    } 

製品モデル -

public function stocks() { 
     return $this->belongsToMany('App\Stock', 'Stock_Products_Amount ', 'fk_stockproduct', 'fk_stock'); 
    } 

今、あなたが機能の上に使用することができます

のでLaravel Many-to-Many

に基づいてモデルのような関係を持つことができますすべての値を一緒に調べます。

余分な列の値を取得するには、withPivot()を使用してください。、すべて一緒にあなたの視野で物事を取得する機能など(getProducts)を定義し、このようなビューのすべての製品を取得するには

public function Products() { 
      return $this->belongsToMany('App\Products', 'Stock_Products_Amount ', 'fk_stock', 'fk_stockproduct')->withPivot("amount"); 
      //     Product Model^ name of pivot table^
     } 

- -

ストックモデルamountの値を取得するには、カラムはとしてそれを使用します -

public function Products() { 
      return $this->belongsToMany('App\Products', 'Stock_Products_Amount ', 'fk_stock', 'fk_stockproduct')->withPivot("amount"); 
      //     Product Model^ name of pivot table^
     } 
    public function getProducts() { 
      return $this->Products()->get(); 
      //   ^this is defined above 
     } 

今コントローラであなただけの全株式を取得し、[表示] -

public function stockOverview() 
    { 
     $stocks = Stock::all(); 
     return view('stock.overview')->with($stocks); 
    } 
にそれらを送信する必要が

<!-- list of all stocks --> 
@foreach($stocks as $stock) 
{{$stock}} 
    <!-- list of products for that stock --> 
    @foreach($stock->getProduct() as $Product) 
        <!--^this is the function we declared above in model --> 
    {{$Product}} 

    @endforeach 
@endforeach 

- - あなたのビューで

は今、あなたはこのようなすべてのものを得ることができます私はアイデアを与えていることから、適切なモデルやプロパティ名を確認してください。また、withPivot()で適切な列を使用してください。

+0

ありがとう!関連する質問:私は在庫をループするビューで、このループで商品をループします。今では、X {{$ product-> $ stocks-> amount}} 'と' {{$ product-> stocks-> amount}} 'の両方が在庫にあるX個の商品がどれくらいあるかを示したいと思います。 '未定義のプロパティ:Illuminate \ Database \ Eloquent \ Collection :: $ amount'あなたは私を助けることができますか? – Scarwolf

+0

@laurent回答を更新しました。再試行してください。 –

+0

ありがとうございました。残念ながら、今では 'non-object'のプロパティを取得しようとしています。withPivot()はあなたと同じように配置され、ビューの使い方は{{$ stock-> product-> amount}}'です。 '{{$ product-> stock-> amount}}'は動作しません。これは私が私の見解と一緒に送るものです: '$ data = array( '株式' => $株、 'products' => $製品、 '金額' => $金額 ); – Scarwolf

関連する問題