【问题标题】:Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsTo::save()调用未定义的方法 Illuminate\Database\Eloquent\Relations\BelongsTo::save()
【发布时间】:2021-03-12 09:31:32
【问题描述】:

我想将数据插入到多个表中(一对一),但出现错误,并且在我的数据库中,“metode_id”列为空。我希望“metode_id”不为空

这是“Transaksi”类:

class Transaksi extends Model
{
    protected $table = "transaksi";
    protected $primarykey = "id";
    protected $fillable = ['stok_kedelai', 'stok_ragi', 'harga_kedelai', 'harga_ragi'];

    public function metode()
    {
        return $this->belongsTo('App\Metode');
    }
public function pengguna()
    {
        return $this->belongsTo('App\Pengguna');
    }
}

这是“Metode”类:

class Metode extends Model
{
    protected $table = "metode";
    protected $primarykey = "id";
    protected $fillable = ['bni', 'bri', 'mandiri', 'bca', 'btpn', 'ovo', 'gopay', 'dana'];

    public function transaksi()
    {
        return $this->hasOne('App\Transaksi', 'metode_id');
    }
}

这是“Transaksi”的数据库:

public function up()
{
    Schema::create('transaksi', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->bigInteger('pengguna_id')->unsigned();
        $table->integer('stok_kedelai');
        $table->integer('stok_ragi');
        $table->integer('harga_kedelai');
        $table->integer('harga_ragi');
        $table->bigInteger('metode_id')->unsigned();
        $table->timestamps();
    });

    Schema::table('transaksi', function (Blueprint $table) {
      $table->foreign('pengguna_id')->references('id')->on('pengguna')->onDelete('cascade')->onUpdate('cascade');
    });

    Schema::table('transaksi', function (Blueprint $table) {
      $table->foreign('metode_id')->references('id')->on('metode')->onDelete('cascade')->onUpdate('cascade');
    });
}

这是“Metode”的数据库:

public function up()
{
    Schema::create('metode', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->integer('bni')->nullable();
        $table->integer('bri')->nullable();
        $table->integer('mandiri')->nullable();
        $table->integer('bca')->nullable();
        $table->integer('btpn')->nullable();
        $table->integer('ovo')->nullable();
        $table->integer('gopay')->nullable();
        $table->integer('dana')->nullable();
        $table->timestamps();
    });
}

我想将数据插入到取决于 pengguna 表的“id”的多个表中,但我收到错误 Call to undefined method Illuminate\Database\Eloquent\Relations\BelongsTo::save()

public function data_penjualan(Request $request)
{
    $pengguna = Pengguna::where('id', Auth::user()->id)->first();

    $transaksi = new Transaksi();
    $transaksi->stok_kedelai    = $request->stok_kedelai;
    $transaksi->stok_ragi       = $request->stok_ragi;
    $transaksi->harga_kedelai   = $request->harga_kedelai;
    $transaksi->harga_ragi      = $request->harga_ragi;
    $pengguna->transaksi()->save($transaksi);

    $metode = new Metode();
    $metode->bni = $request->bni;

    $transaksi->metode()->save($metode);

    return view('transaksi.supplier', compact('transaksi'));
}

这是我的数据库,“metode_id”为空,我希望“metode_id”不为空: enter image description here

【问题讨论】:

  • 错误是在$pengguna->transaksi()->save($transaksi); 行吗?
  • 没有。错误是 $transaksi->metode()->save($metode);
  • 你确定$pengguna->transaksi()->save($transaksi); 没有给出任何错误,如果你在它之后立即执行dd($transaksi->fresh()),你会得到记录吗?
  • 是的。做完 dd($transaksi->fresh()) 我得到了一条记录,但“metode_id”为空
  • $transaksi 记录是否真的保存在数据库中?你能在数据库中看到它吗

标签: laravel eloquent undefined one-to-one multiple-tables


【解决方案1】:

如果您尝试更新belongsTo 关系,则必须使用associate 方法而不是save 方法。

...
    $metode = new Metode();
    $metode->bni = $request->bni;
    $metode->save();

    $transaksi->metode()->associate($metode);
    $transaksi->save();
...

【讨论】:

  • 它没有给出任何错误,但我没有从 $metode 得到记录
  • @MyAugust 我认为应该使用$metode->save();Metode 对象保存在数据库中。我更新了我的帖子。
【解决方案2】:

如果你尝试在 belongsTo 关系中保存方法。

添加注释(控制器文件)

public function addComment($id)
{   
    $comment = new Comment(['comment' =>'Comment 1']);
    $user = User::find(1);
    $user->comment()->save($comment);
    return "Comment Submitted";
}

Comment.php(模型文件)

class Comment extends Model
{
  use HasFactory;
  protected $table ="comments";
  protected $fillable = ['comment'];

  public function User()
 {
    return $this->belongsTo(User::class);
 } 
}

web.php(路由文件)

Route::get('comment/{id}',[UserController::class,'addComment']);

【讨论】:

    猜你喜欢
    • 2020-01-29
    • 2018-11-22
    • 2021-03-06
    • 2021-06-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 2020-11-23
    • 1970-01-01
    相关资源
    最近更新 更多