在laravel中更新期间的唯一值检查

时间:2017-02-18 11:10:24

标签: php laravel validation

我试图解决这个问题。我已经为这个问题寻找了几个答案,我尝试了这个解决方案,但我没有成功。

这是我的控制器功能...

public function ProductCategoriesUpdate(Request $request, $category_id)
{
    $cat=\DB::table('product_categories')
            ->where('category_id',$category_id)
            ->first();

    $v = Validator::make($request->all(), [
        'category_name' =>'unique:product_categories,category_name,'.$cat->category_id,
           ]
        );
    }

它'显示以下错误:

  

SQLSTATE [42S22]:未找到列:1054未知列' id'在'哪里   条款'

     

(SQL:选择count(*)作为聚合          来自product_categories          category_name = Test和id<> 9)

我的表:

表名:product_categories

字段名称:category_idcategory_name

2 个答案:

答案 0 :(得分:0)

您可以在模型类中使用以下内容

public static function validate($input, $scenario, $id = null){


    switch($scenario)
    {
        case 'store':
            $rules = [
                    'category_name' => 'required|unique:product_category
                     ];  

          break;


        case 'update':
            $rules = [
                    'category_name' => 'required|unique:product_categories'.',category_name,' . $id

                    ];  
        break;

    }

在控制器中,您可以调用如下

//Insert
$validator = YourClass::validate($request->all(), 'store', '');
//Update
$validator = YourClass::validate($request->all(), 'update', $id);

答案 1 :(得分:0)

您应该查看表中的列,以查看列名中是否有任何错误,并检查是否有任何丢失的代码。

在您的where条件下,请尝试使用以下代码:

 $cat=\DB::table('product_categories')
        ->where('category_id', '=', $category_id)
        ->first();