2017-04-24 4 views
0

나는 제품 테이블과 국가 테이블을 가지고 있고, 서로에게 많은 관계가 있지만 관계에 대한 추가 매개 변수를 포함한다고 가정합니다.정보와 laravel 관계

때문에 제품에 country_id, PRODUCT_ID, 가격

제품 모델이있는 product_country에서 제품 ID, 이름 국가에서

국가 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, 이름, 가격 , 운송 등. 국가 ID로. –

+0

@ShahafAntwarg 관계 함수에서 다중 열을 전달합니다. withPivot ('column1', 'column2')와 같이; –