user11690083
user11690083

Reputation:

save array in controller laravel

ErrorException Array to string conversion

    $presocio              = new Presocio;
    $presocio->prestamo_id = $request->prestamo_id;
    $presocio->ncuota      = $request->ncuota;
    $presocio->montopag    = $request->montopag;
    $presocio->fechapag    = $request->fechapag;
    $presocio->save();

In the end I managed to make it work like this, it works perfectly. it can be done in different ways, example with ::create ::insert

    $prestamo           = new Prestamo;
    $prestamo->socio_id = $request->socio_id;
    $prestamo->monto    = $request->monto;
    $prestamo->cuotas   = $request->cuotas;
    $prestamo->alias    = $request->alias;
    $prestamo->save();

    $idprestamo = $prestamo->id;

    if (count($request->ncuota) > 0) {
        foreach ($request->ncuota as $item => $v) {
            $presocio = new Presocio;
            $presocio->fill(
                array(
                    'prestamo_id' => $idprestamo,
                    'ncuota'      => $request->ncuota[$item],
                    'montopag'    => $request->montopag[$item],
                    'fechapag'    => $request->fechapag[$item],
                )
            );
            $presocio->save();
        }
    }
    toast('Pago Programados Registrado', 'success');
    return redirect('prestamo');

Upvotes: 2

Views: 673

Answers (3)

Michael Mano
Michael Mano

Reputation: 3440

Update since we now have the form supplied. You are using form names such as ncuota[] instead of ncuota which makes it an array. Are you able to make more than 1 Preseocio? if this is the case you want to loop over the items in the controller.

for ($i = 0; $i < count($request->ncuota); $i++)
{
    Presocio::create([
        'prestamo_id' => $request->prestamo_id[$i],
        'ncuota' => $request->ncuota[$i],
        'montopag' => $request->montopag[$i],
        'fechapag' => $request->fechapag[$i],
    ]);
}

Otherwise just remove the [] off the end of the form names.

class Presocio
{
    ...
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'prestamo_id',
        'ncuota',
        'montopag',
        'fechapag',
    ];
    ...
}

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

Now, Thats not the issue. That is just a bit of house keeping.

Your issue is that one of your request fields is an Array. Which ever one it is you will need to convert it to a JSON object or find a better way of storing it. If you dont care and want to keep it as an array, modify the database field to be a jsonb field.

Upvotes: 1

Amit Senjaliya
Amit Senjaliya

Reputation: 2945

You can do that like:

for($i=0; $i < count($request->input('prestamo_id', 'ncuota', 'montopag', 'fechapag')); $i++) {

    $presocio              = new Presocio;
    $presocio->prestamo_id = $request->prestamo_id[$i];
    $presocio->ncuota      = $request->ncuota[$i];
    $presocio->montopag    = $request->montopag[$i];
    $presocio->fechapag    = $request->fechapag[$i];
    $presocio->save();
}

Upvotes: 0

VIKAS KATARIYA
VIKAS KATARIYA

Reputation: 6005

Try This create method

remove your all code and write only this code in your store method

$input = $request->all();
Presocio::create($input);

Upvotes: 0

Related Questions