2014-12-05 3 views
0

laravel 4를 사용하여 전자 상거래 응용 프로그램을 구축 중입니다. 세금 및 옵션을 관리하는 올바른 방법으로 분실했습니다. 필수 제품 옵션 laravel

products table: id,name,price,id_taxe 
Got a tax table : id,name,rate 

아주 간단한

이 laravel 모델

을하지만, 문제와이를 관리하는 부분에서 온다 :

제품이 자신의 가격과 세금 옵션을 가지고 있어야합니다 여기 내가 데이터베이스에서 수행 한 것입니다 속도 (제품과 동일하지 않음) 옵션에는 선택 제품에 따라 최소 및 최대 수량이 있습니다. 난 제품 1 (100 USD)를 구입하는 경우 나 11 X 제품 (1)을 구입하는 경우

는 옵션 1 옵션 (1)가 필요하다 (10 개)의 제품 (최대) 적어도 1 양 (분)를 필요 적어도 2 개의 양.

2 (200 USD) 제품을 구입 한 경우 옵션 1에 최소 1 개 이상의 제품이 필요합니다.

올바른 방법으로 관리하는 방법을 모르겠습니다.

제품 표에 제품과 같은 옵션을 만들어야합니까? laravel 관계를 사용하여 옵션과 제품을 연결하는 방법 (최소 및 최대 제한 조건 포함).

도움 주셔서 감사합니다.

+0

을 당신은 '옵션'및 '옵션 1'에 대해 이야기하고, 당신은 정확히 무엇을 의미합니까? 제품 구매에있어 제약 조건은 무엇입니까? 귀하의 질문에서 얻은 것 : 제품마다 최소/최대 금액을 사고 싶습니다. 그러나 나는 이것을 읽었습니다. "옵션과 제품을 연결하는 법 (최소 및 최대 제약 포함)". 당신이 질문에서 만들 수있는 것보다 더 많은 '선택'이 있음을 나타냅니다. –

+0

잠시 동안 모든 제품에 대해 단 하나의 옵션 만 사용할 수 있지만 나중에 변경할 수 있습니다. 제약 조건은 제품을 구입할 때 사용하는 옵션의 수입니다. 예를 들어 제품 1의 최대 옵션은 구입 한 경우 10입니다. 11 제품, 11/10 = 1.1, 최소 옵션 수량은 2이고 최대 값은 10입니다 (제품 당 1 개), 더 명확합니까? – user3384179

답변

0

알았어, 나 한번 해봐.

귀하의 의견에 따라 가장 좋은 방법은 피봇 테이블을 통해 옵션을 연결하는 것입니다. 또한이 피벗 테이블은 주문한 x 개의 제품에 대해 이러한 옵션의 수를 나타내는 숫자 여야합니다.

마이그레이션 : 제품 테이블에

Schema::create('product_options', function(Blueprint $table){ 
$table->integer('product_id')->unsigned(); 
$table->integer('option_id')->unsigned(); 

$table->integer('per_x_products'); 

$table->foreign('product_id') 
    ->references('id')->on('products') 
    ->onDelete('cascade') 
    ->onUpdate('cascade'); 
$table->foreign('option_id') 
    ->references('id')->on('options') 
    ->onDelete('cascade') 
    ->onUpdate('cascade'); 
} 

관계 :

public function options(){ 
return $this->belongsToMany('Option', 'product_options','product_id','option_id') 
    ->withPivot(['per_x_products']); 
} 

당신이 제품의 ID 및 주문 양을 얻을 제품의 위해시. 이제 제품, 관련 옵션 및 옵션이 증가하는 주문한 제품의 수량을 얻을 수 있습니다.

$product = Product::find($id); 

foreach($product->options as $option){ 

$perXProducts = $option->pivot->per_x_products 

$minusThis = $amountOrdered % $perXProducts; 

$amountOfOptions = ($amountOrdered - $minusThis)/$perXProducts; 

$optionAmountsById[$option->id] = $amountOfOptions; 
} 

당신은 위의를 시도하고 거기에 약간의 버그가있을 수 있으므로,이 모든 내 마음의 상단의 얼마나 멀리 당신이 얻을 볼 수 있습니다. 또한 여기 좀 봐 :

http://laravel.com/docs/4.2/eloquent#working-with-pivot-tables

+0

안녕하세요, 내 문제를 해결하는 훌륭한 솔루션 덕분에, 내 다른 문제와 함께 이것을 구현하려고합니다 (내 다른 질문을 참조하십시오.) 다행입니다. – user3384179