2016-06-17 79 views
0

你好,我有這4個表:Laravel ORM關係

Products (id, name) 

Params (id, name) 

Product_Param (id, product_id, param_id) 

Values (product_param_id, value) 

我可以得到所有產品PARAMS:

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更好的解決方案。帕拉姆型號:

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; 
} 

但是在參數型號我不能讓產品編號- >在哪裏( '的product_id', '=',$這個 - > 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(微笑),這是一種痛苦,因爲企業不明白我爲什麼要這樣做。 –