如何从关系模型中保存更新Laravel 5.3

时间:2017-05-21 11:09:39

标签: php sql laravel-5.3 laravel-eloquent

我想在Laravel 5.3中保存一对多关系模型的更新,但是我有这个错误。

  

HasOneOrMany.php第221行中的FatalThrowableError:   类型错误:传递给Illuminate \ Database \ Eloquent \ Relations \ HasOneOrMany :: save()的参数1必须是Illuminate \ Database \ Eloquent \ Model的实例,给出的Illuminate \ Database \ Eloquent \ Collection实例,在C:中调用第129行的xampp \ htdocs \ wismasejahtera \ app \ Http \ Controllers \ JurnalController.php

这是我的Jurnals模型:

public function djurnals()
{
    return $this->hasMany('App\DJurnals', 'jurnal_id');
}

这是我的Djurnals模型:

public function jurnals()
{
  return $this->belongsTo('App\Jurnals');
}

public function rekenings()
{
  return $this->belongsTo('App\Rekenings');
}

这是我的控制器:

$jurnal = Jurnals::find($id);
  $jurnal->no_jurnal = $request->no_jurnal;
  $jurnal->tgl_jurnal = $tglJurnalFix;
  $jurnal->keterangan = $request->keterangan;
  $jurnal->save();

  //ini Array
  $kode_rekening = $request->kode_rekening;

  for($i=0; $i<count($kode_rekening); $i++){
    $djurnal = Djurnals::where('jurnal_id', $id)->get();
    $djurnal->kode_rekening = $request->kode_rekening[$i];
    $djurnal->keterangan_rekening = $request->keterangan_rekening[$i];
    $djurnal->d_k = $request->d_k[$i];
    $djurnal->jumlah = $request->jumlah[$i];

    if($request->d_k[$i] == 'D'){
      $saldoRekKas = Rekenings::where('kode_rekening', 'like', '111%')
                                ->increment('saldo', $request->jumlah[$i]);
    }
    else{
      $saldoRekKas = Rekenings::where('kode_rekening', 'like', '111%')
                                ->decrement('saldo', $request->jumlah[$i]);
    }
    $jurnal->djurnals()->save($djurnal);
  }
  return Redirect::to('jurnal');

错误在Controller的这一行:

$jurnal->djurnals()->save($djurnal);

当我使用这种方式保存新的jurnal和djurnal时,它可以正常工作。但是,当我尝试保存更新时,它显示错误。如何将此更新数据保存到数据库?有人可以帮帮我吗?

1 个答案:

答案 0 :(得分:0)

由于您使用jurnal_id获取Djurnals模型,因此需要直接保存。

替换

Djurnals::where('jurnal_id', $id)->get();

使用

Djurnals::where('jurnal_id', $id)->first();

替换

$jurnal->djurnals()->save($djurnal);

使用

$djurnal->save();

$jurnal->djurnals()->save($djurnal);仅在保存新创建的模型时使用。