Skip to content
Advertisement

ErrorException Array to string conversion in Laravel form submission with repeater fields

In my Laravel application, I have the following form to submit data:

{!! Form::open(array('route' => 'testresults.store','method'=>'POST')) !!}

<div class="row">

    <div class="col-xs-12 col-sm-12 col-md-12">

        <div class="form-group">



            <strong>Test ID:</strong>


            @foreach ($getTests as $object)

                {!! Form::text('test_id', ''.$object->id .'', array('placeholder' => 'Test Name','class' => 'form-control','readonly')) !!}

                
            @endforeach


        </div>

    </div>


   

    <div class="col-xs-12 col-sm-12 col-md-12">

       <table class="table table-bordered">

  <tr>

     <th>Test</th>

     <th width="280px">Result</th>

  </tr>

    @foreach ($getTests as $key => $getTest)

    
       
            
            @foreach (explode(',', $getTest->samp_list) as $samp_list)
                <tr>
                <td>
                 {!! Form::text('test_type[]', ''.$samp_list.'', array('placeholder' => 'Test Type','class' => 'form-control','readonly')) !!}    
                </td>
                <td>{!! Form::text('test_result[]', null, array('placeholder' => 'Test Result','class' => 'form-control')) !!}</td>
                </tr>
            @endforeach 

        

    

    @endforeach

</table>

    </div>

     <div class="col-xs-12 col-sm-12 col-md-12">

        <div class="form-group">



            <strong>Test By:</strong>

                {!! Form::text('test_by', ''.Auth::user()->name .'', array('placeholder' => 'Test Name','class' => 'form-control','readonly')) !!}


        </div>

    </div>




    <div class="col-xs-12 col-sm-12 col-md-12 text-center">

        <button type="submit" class="btn btn-primary">Submit</button>

    </div>

</div>

{!! Form::close() !!}

This is my create.blade.php

And my controller looks like this:

public function store(Request $request)

    {
        try{

            request()->validate([

            'test_id' => 'required',

            'test_type' => 'required',

            'test_result' => 'required',

            'test_by' => 'required',

        ]);

    

        TestResult::create($request->all());

    

        return redirect()->route('testresults.index')

                        ->with('success','Test Type created successfully.');

        }

        catch(Exception $e){

            return redirect()->route('testresults.create')

                        ->with('failed','An error has been occured.');
        }
   

    }

Now the problem is, whenever I tried to submit the data, it gives me an error saying

ErrorException Array to string conversion

test_type and test_result fields are repeaters. Due to that, I’ve used those field names as test_type[] and test_result[].

Advertisement

Answer

As you’re trying to save an array in your database, you need to define a text or json column in your database and cast the field to one of array, json or collection types.

Define cast in TestResult model:

TestResult
{
    protected $casts = [
        'test_type' => 'array',
        'test_result' => 'array',
    ];

}

Learn more about casting in laravel models from here

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement