laravel枢轴表独特

时间:2016-08-01 09:28:46

标签: php sql laravel

的order_id .... .... PRODUCT_ID .... product_quantity .... created_at的updated_at

这是我的数据透视表...在我的OrderRequest表中,我想将product_id指定为唯一。但是当我这样写的时候;

public function rules()
    {            
        return [
                'product_id' => 'unique:order_product,product_id'
                ];
   }

我遇到了问题。 product_id变得独一无二。但不仅在订单中,它变得完全独特。我想在其他订单中使用此product_id,但我不能。我能做什么?如何为每个order_id值指定product_id为唯一?

2 个答案:

答案 0 :(得分:0)

在您的控制器中,假设您调用saveProducts方法:

function saveProducts($request){
    validateProductList($request->input('product_list'))
    $order->product()
          ->updateExistingPivot($product_id[$i], 
                array( 
                    'product_quantity' => $product_quantity[$i], 
                    'product_status' => $product_status[$i], 
                    'updated_at' => Carbon::now() ));
    // ....
}

function validateProductList($productIds){
    if(isProductIdDuplicated($productIds)){
        $error = 'You have a duplicated product in your Order, please edit it'
        return redirectBack()-withError();
    }
}

function isProductIdDuplicated($productIds){
    $occureces_array = productIds();
    foreach($productIds as $id){
        if(++$occureces_array[$id] > 1){
            return true;
        }
    }
    return false;
}   

在您看来,您可以访问此$error变量。

答案 1 :(得分:0)

感谢您的帮助。我已经结束了这个问题,它现在有效......

这是我观点的一部分;

<div class="grid1">
   {!! Form::label('product_list'.$product_row, Lang::get('home.Select Product')) !!}         
</div>
<div class="grid2 searchDrop"> 
   {!! Form::select('product_list[]', $product_list, null, ['style'=>'width:150px;'])!!}

这是我控制器的一部分;

public function store(OrderRequest $request)
    {
      $order = Order::create( $request->all());

      $product_list= $request->input('product_list'); 
      $product_quantity = $request->input('product_quantity');
      $product_status = $request->input('product_status' );

            /* attach pivot table */
      $order->product()->attach($product_list);

      /* get the product list as array */              
      foreach($product_list as $key => $product_id)
      {   
        $order->product()->updateExistingPivot($product_id, array(
                        'product_quantity' => $product_quantity[$key], // product_quantity is array
                        'product_status' => $product_status[$key], // product_status is array
                        'updated_at' => Carbon::now()
                        ));
      }              

           flash(Lang::get('home.The order has been created!'));
         return redirect(url('/admin/orders/details',$order->id))->with('flash_message');
     }

这是我的OrderRequest;

public function rules()
    {
        return [
            'customer_id' => 'required',
            'product_quantity.*' =>'not_in:0',
            'product_list' => 'product_unique',  //custom validation in AppServiceProvider
       ];
    }

这是我的AppServiceProvider;

public function boot()
    {
       Validator::extend('product_unique', function($attribute, $value, $parameters, $validator) {
                if ( count(array_unique($value))!=count($value) ) {
                    return false;
                }
            return true;
        });
    }

最后,在我的validation.php中,我添加了

"product_unique" => "Please select a product only once!",