2014-12-28 3 views
2

관계 열 합계를 열망하는 방법을 알아낼 수 없습니다.Laravel/Eloquent hasMany relationship sum()

데이터베이스 (단순화 된)는 다음과 같습니다.

테이블

PRODUCT  PRODUCT_VARIATIONS 
*ID*   *ID* 
*NAME*  *NAME* 
       *AVAILABLE_STOCK* 

나는 다음과 나의 관계가 설정되어;

public function variations() 
{ 
    return $this->hasMany('Product_variation'); 
} 

모든 제품을로드 할 때 제품 오브젝트 자체에 연결된 모든 제품의 SUM을 볼 수 있기를 원합니다.

제품에는 여러 가지 변형이있을 수 있습니다.

나는 제품에 부착 된 전체 개인 편차를 반환 할 수 있습니다 (아래 참조)

$products = Product::with('variations')->paginate(15); 

하지만 난 그냥 계정에 모든 변화를 가지고 자신의 available_stock 수를 보여주는 간단한 정수로 모든 제품을 반환하려면.

나는 기본적으로 관계가 열망로드를 계산 지원하지 않습니다

@foreach ($products as $product) 
$product->available_stock // Returns INT 
@endforeach 

답변

0

답장을 보내 주셔서 감사합니다. @joseph, 이제 야생 거위 추격전에 나왔습니다.

것은이
$products = Product::with('variations')->remember(2)->paginate(15); 
    foreach ($products as $product) { 
     $i = 0; 
     foreach ($product->variations as $variation) 
     { 
      $i = $i + $variation->available_stock; 
     } 
     unset($product->variations); 
     $product->available_stock = $i; 
    } 
+0

당신은 아직도 무엇을 원하는 @JosephSilber 제안했지만 약간 변경되었습니다. –

2

, 당신은 count하지만 sum을 원하지 않는 매력없는 foreach는 함께 문제를 해결했다.

public function availableStock() 
{ 
    return $this->hasOne('Product_variation') 
     ->selectRaw('product_id, sum(available_stock) as aggregate') 
     ->groupBy('product_id'); 
} 

public function getaAvilableStockAttribute() 
{ 
    if (! array_key_exists('availableStock', $this->relations)) { 
     $this->load('availableStock'); 
    } 

    $relation = $this->getRelation('availableStock'); 

    return ($relation) ? $relation->aggregate : null; 
} 

그런 다음 당신이 할 수있는 당신이 무엇을 요구 : 그래서 여기 당신은 단지 다른 집계 함수와 바로 연결 @Joseph 내 문서와 같은 필요가 무엇

$products = Product::with('availableStock')->get(); 
$products->first()->availableStock; // '155' | null 

// or simply 
Product::first()->availableStock; // '155' | null