2017-04-24 138 views
0

我有產品表和國家表,他們假設是在一個多對多的關係,但爲關係包含額外的參數。laravel與信息的關係

所以在產品存在產品ID,名稱

在國家

有全國編號,名稱

在product_country有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'); –