2017-04-24 82 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'); –