2017-04-24 21 views
0

私は商品テーブルと国のテーブルを持っていますが、それらはお互いに多くの関係にあると思われますが、関係の追加パラメータを含んでいると考えられます。 product_countryでlaravel情報との関係

ので、製品に製品IDがあり、国内の名前

国IDがあり、名前

COUNTRY_ID、PRODUCT_ID、価格

製品モデルがあります:

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 


class Product extends Model 
{ 
    /** 
    * Get the countries for the product. 
    */ 
    public function countries() 
    { 
     return $this->belongsToMany('Country'); 
    } 

} 

国モデル:

namespace App\Models; 

use Illuminate\Database\Eloquent\Model; 


class Country extends Model 
{ 
    /** 
    * Get the countries for the product. 
    */ 
    public function products() 
    { 
     return $this->belongsToMany('Product'); 
    } 

} 

- > withPivot( 'price') ピボットの関係に追加することはできますが、私が理解できないことは - 例えば製品のリストを照会する最良の方法です国によっては、おそらく私の構造は間違っていますが、最終的には、特定の国のための価格でもちろんすべての製品を手に入れることができるようにしたいと思います。

私は国ごとに製品の価格を得るために多くの仕事をする必要があると感じます。

Country::find(1)->products->first()->pivot->price 

答えて

1

Country.php

public function products() 
    { 
     return $this->belongsToMany(Product::class,'pivot_table_name','country_id','product_id')->withPivot('price','sku'); 
    } 

して、このクエリを試しに最初の変更この関係機能を。

$countries = Country::with(['products'])->get(); 

あなたはパラメータを渡したい場合は、その後

$countries = Country::with([ 
       'products' => function ($query) use ($productId) { 
        $query->where('id', $productId); 
       } 
      ])->where('id', $countryId)->first(); 
+1

このクエリを使用ええ、私の例では動作し、それはあなたがやったとまったく同じですが、私はそれがないと言っていませんでした私はそれをより簡単でスマートにしたいだけです。だから、私は私ができることを知っていると言っています、それは私がやりたいことではありません。私が目指しているのは:製品_idとcountry_idを与えます - >すべてのパラメータで製品を取得します。それは出荷、通貨、SKUなど...私は製品の国のテーブルと製品テーブルの "内部結合"を行うことができるようにしたいので、私は製品から得るでしょう - > ID、名前、価格、船積み、など。 –

+0

@ShahafAntwargあなたは関係関数で複数の列を渡します。 withPivot( 'column1'、 'column2')のように。 –

関連する問題