2016-06-17 51 views
0

こんにちは私は、これらの4つのテーブルがあります:私はすべての製品のparamsを取得することができますLaravel ORM関係

Products (id, name) 

Params (id, name) 

Product_Param (id, product_id, param_id) 

Values (product_param_id, value) 

を:

public function params() { 
     return $this->belongsToMany('App\Models\Param', 'product_param')->withPivot('id', 'type1_id', 'type2_id'); 
    } 

コード:

foreach($products->params as $param) { 
    var_dump($param) 
} 

そして今、私はのparamを取得する必要がありますが値。 私はこのような愚かなコードを書いた:

public static function getPPV($product_id, $param_id) { 

    $value = new \App\Models\ParamValue(); 
    $value->value = NULL; 
    $value->id = NULL; 

    $pp = \App\Models\ProductParam::where('product_id','=',$product_id)->where('param_id','=',$param_id)->first(); 

    if (!$pp) return $value; 


    $ppv = \App\Models\ProductParamValue::where('product_param_id','=',$pp->id)->first(); 


    if (!$ppv) return $value; 

    $value->value = $ppv->productvalue->value; 
    $value->id = $ppv->productvalue->id; 


    return $value; 
} 

それは動作しますが、私はORMとのより良いソリューションを使用します。 Paramモデル:

public function val() { 
    $p = $this->hasOne('App\Models\ProductParam')->orderBy('id','desc')->where('product_id','=',$this->product_id); 
    $ppv = $p->getResults()->hasOne('App\Models\ProductParamValue'); 
    $val = $ppv->getResults()->belongsTo('App\Models\ParamValue','param_value_id'); 

    return $val; 
} 

しかし、Paramのモデルでは、私はプロダクトID 取得することはできません - >( 'product_idを'、 '='、の$ this - >のproduct_idを)(我々は、Product_Param(ID、PRODUCT_IDを持っていますparam_id)と私はProduct_Paramからすべての行を取得します。

ORMを書くために助けてください。

答えて

0

これは、あなたが探しているものではないかもしれないが、あなたはそのように値テーブルにvalue列を実装しようとしていますProduct_Paramsテーブルの独自の列を使用していますか?

foreach($products->params as $param) { 
    var_dump($param->pivot->value); 
} 
+0

はい、できます。私はプロジェクトのチームリーダーですが、もし私がなぜそれをやりたいのか分からないので、product_idの列をid(笑顔)に変更したいのですが、それは痛みです。 –