的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为唯一?
答案 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!",