【问题标题】:How to save update from relationships model Laravel 5.3如何从关系模型 Laravel 5.3 中保存更新
【发布时间】:2017-10-21 02:59:53
【问题描述】:

我想在 Laravel 5.3 中保存一对多关系模型的更新,但出现此错误。

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

这是我的期刊模型:

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 时,它可以正常工作。但是,当我尝试保存更新时,它会显示错误。如何将此更新数据保存到数据库?谁能帮帮我?

【问题讨论】:

    标签: php sql laravel-5.3 laravel-eloquent


    【解决方案1】:

    由于你使用jurnal_id获取Djurnals模型,所以需要直接保存。

    替换

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

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

    替换

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

    $djurnal->save();
    

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

    【讨论】:

    • 啊,明白了。但为什么它显示另一个错误?方法保存不存在
    • 更新了我的答案,在你的循环中用first()替换get()
    猜你喜欢
    • 2015-08-06
    • 2017-05-17
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 2014-09-02
    • 2017-07-08
    • 2018-03-08
    • 1970-01-01
    相关资源
    最近更新 更多