在验证器上的laravel控制器中的更新方法中出错

In my controller I am checking for unique company_name using the validator but shows an error when passing already exist company name.Works fine with other text.

$input['company_name'] = Input::get('company_name');
        $rules = array('company_name' => "unique:subcontractors,company_name,$id");
        $validator_cn = Validator::make($input, $rules);
        if ($validator_cn->fails()) { 
            return Redirect::back()->with('alert-danger',"Company Name already exist.")->withInput();
        }

Gives an error "helpers.php line 519:"

htmlspecialchars() expects parameter 1 to be string, array given

view

@extends('layouts.master')                    
@section('content')
@if (Session::get('alert-danger') || Session::get('alert-success') )
<script>
    @if(Session::get('alert-danger'))
        show_notification("error","{{ Session::get('alert-danger') }}");
    @endif
    @if(Session::get('alert-success'))
        show_notification("success","{{ Session::get('alert-success') }}");
    @endif
</script>
@endif

<!--------------DATA TABLE HEADER----------------------->
<!-- Main content -->
<div class="content-wrapper">
        <!-- Page header -->

        <!-- /page header -->
        <!-- Content area -->
        <div class="content"> 

        <div class="panel panel-white">

            <?php 
                $id = '';
                $company_name = '';
                $addressline1 = '';
                $addressline2 = '';
                $addressline3 = '';


                if(!empty($request))
                {
                    $company_name = $request->old('company_name');
                    $addressline1 = $request->old('addressline1');
                    $addressline2 = $request->old('addressline2');
                    $addressline3 = $request->old('addressline3');

                    $evaluation_comments = $request->old('evaluation_comments');
                }
                else if(isset($subcontractor_detail))
                {
                    $subcontractor_id = $subcontractor_detail->id;
                    $company_name = $subcontractor_detail->company_name;
                    $addressline1 = $subcontractor_detail->addressline1;
                    $addressline2 = $subcontractor_detail->addressline2;
                    $addressline3 = $subcontractor_detail->addressline3;

                }
                ?>


                {{ Form::open(array('id'=>'subcontractorForm','enctype'=>"multipart/form-data",'class' => 'steps-validation','url' => (isset($subcontractor_detail)) ? "/subcontractors/$subcontractor_id" : "/subcontractors", 'method' => (isset($subcontractor_detail)) ? "put" : "post")) }}
                    @if(isset($subcontractor_detail)) {{ Form::hidden('id', $subcontractor_id)}}@endif
                    <h6>Subcontractor Details</h6>
                    <fieldset>
                            <legend class="text-bold border-info text-info">Subcontractor Details</legend>
                            <div class="row">
                                    <div class="col-md-4">
                                            <div class="form-group">
                                                <label>Company Name: <span class="text-danger">*</span></label>
                                                <div class="input-group">
                                                <span class="input-group-addon"><i class="icon-location3"></i></span>
                                                    {{ Form:: text('company_name', $company_name, array('id'=>'company_name','class' => 'form-control initial_cap', 'required' => '', 'placeholder' => 'Company Name', 'maxlength' => '100')) }}
                                                </div>    
                                            </div>
                                    </div>

                            </div>
                            <div class="row">
                                    <div class="col-md-4">
                                            <div class="form-group">
                                                    <label>Address Line1: <span class="text-danger">*</span></label>
                                                    <div >{{ Form:: text('addressline1', $addressline1, array('class' => 'form-control initial_cap','required' => '', 'placeholder' => 'Address Line1', 'maxlength' => '100')) }}</div>
                                            </div>
                                    </div>
                                    <div class="col-md-3">
                                            <div class="form-group">
                                                    <label>Address Line2: <span class="text-danger">*</span></label>
                                                    <div >{{ Form:: text('addressline2', $addressline2, array('class' => 'form-control initial_cap', 'required' => '','placeholder' => 'Address Line2', 'maxlength' => '100')) }}</div>
                                            </div>
                                    </div>
                                    <div class="col-md-3">
                                            <div class="form-group">
                                                    <label>Address Line3: <span class="text-danger">*</span></label>
                                                    <div >{{ Form:: text('addressline3', $addressline3, array('class' => 'form-control initial_cap','required' => '', 'placeholder' => 'Address Line3', 'maxlength' => '100')) }}</div>
                                            </div>
                                    </div>

                            </div>

                    </fieldset>

                {{ Form::close() }}
            </div>

            <!-- /wizard with validation -->
        </div>
        <!-- /content area -->
</div>

</script>
@stop 

try this code. does this help!

$input['company_name'] = Input::get('company_name');
            $rules = array(
                'company_name' => 'unique:subcontractors,company_name,'.$id
            );
            $validator_cn = Validator::make($input, $rules);
            if ($validator_cn->fails()) {
                return Redirect::back()->with(['alert-danger'=>"Company Name already exist."])->withInput();
            }

You need to add $id only if it has some value otherwise don't add it like,

"unique:subcontractors,company_name".($id ? ",$id" : '')

Full Code,

$input['company_name'] = Input::get('company_name');
$rules = array('company_name' => "unique:subcontractors,company_name".($id ? ",$id" : ''));
$validator_cn = Validator::make($input, $rules);
if ($validator_cn->fails()) { 
   return Redirect::back()->with('alert-danger',"Company Name already exist.")->withInput();
}

According to unique syntax(unique:table,column,except,idColumn), if you want to use except that id then use,

"unique:subcontractors,company_name".($id ? ",id,$id" : '')