SQLSTATE[22007]: Format tanggal waktu tidak valid: 1366 Nilai integer salah Laravel 7

Saya mencoba membuat hubungan antara 2 tabel money_trade dan money_trade_deposits. Skema saya di tabel money_trade_deposits adalah:

 Schema::create('money_trade_deposits', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('mt_dep_number');
        $table->unsignedBigInteger('money_trades_id');
        $table->integer('amount');
        $table->string('payment_method');
        $table->foreign('money_trades_id')->references('id')->on('money_trades')->onDelete('cascade');
        $table->timestamps();
    });

MoneyTradeDepositController.php

 public function store(Request $request)
{
    $request->validate([
        'amount' => ['required', 'string', 'max:255'],
        'payment_method' => ['required', 'string', 'max:255'],

    ]);

    $moneyTradeDeposit = new MoneyTradeDeposit();
    $moneyTradeDeposit->mt_dep_number = uniqid('MTDepNumber-');
    $moneyTradeDeposit->amount = $request->input('amount');
    $moneyTradeDeposit->payment_method = $request->input('payment_method');
    $moneyTradeDeposit->money_trades_id = MoneyTrade::get('id');
    $moneyTradeDeposit->save();

    return redirect()->route('mt.deposit')->withMessage('Added a New Deposit');
}

Model MoneyTradeDeposit.php saya punya

protected $table = 'money_trade_deposits';

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

Tampilan blade saya memiliki modal yang menyediakan input amount dan payment_method. Sekarang saya mencoba untuk mendapatkan id dari tabel money_trade saya dan memasukkannya ke tabel money_trade_deposits saya sebagai money_trades_id. Namun saya mendapatkan kesalahan ini. Ketika saya membuang $request saya bisa mendapatkan nilainya tetapi ketika saya membuang $moneyTradeDeposit, saya mendapatkan kesalahan lengkap ini:

SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '[]' for column `fssdb`.`money_trade_deposits`.`money_trades_id` at row 1 (SQL: insert into `money_trade_deposits` (`mt_dep_number`, `amount`, `payment_method`, `money_trades_id`, `updated_at`, `created_at`) values (MTDepNumber-5f9f198f6c2b3, 1000, MoneyTrade, [], 2020-11-01 20:24:47, 2020-11-01 20:24:47))

Ketika saya dd($request) saya mengerti

masukkan deskripsi gambar di sini

Ketika saya melakukan dd($moneyTradeDeposit); saya mengerti

masukkan deskripsi gambar di sini

MoneyTradeController.php saya untuk referensi memiliki metode store yaitu

public function store(Request $request)
{
    $request->validate([
        'bank' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255'],
        'mt_first_name' => ['required', 'string', 'max:255'],
        'mt_last_name' => ['required', 'string', 'max:255'],
        'password' => ['required', 'string', 'min:8', 'confirmed'],
        'mt_account' => ['required', 'string', 'max:255'],
        'mt_deposit' => ['required', 'string', 'max:255'],
        'mt_leverage' => ['required', 'string', 'max:255'],
    ]);

    $moneyTrade = new MoneyTrade();
    $moneyTrade->mt_number = uniqid('MTNumber-');
    $moneyTrade->bank = $request->input('bank');
    $moneyTrade->email = $request->input('email');
    $moneyTrade->mt_first_name = $request->input('mt_first_name');
    $moneyTrade->mt_last_name = $request->input('mt_last_name');
    $moneyTrade->password = $request->input('password');
    $moneyTrade->mt_account = $request->input('mt_account');
    $moneyTrade->mt_deposit = $request->input('mt_deposit');
    $moneyTrade->mt_leverage = $request->input('mt_leverage');
    $moneyTrade->user_id = auth()->id();
    $moneyTrade->save();

    return redirect()->route('home')->withMessage('MoneyTrade Account Created');
}

Dan seorang model MoneyTrade.php

class MoneyTrade extends Model
{
   // protected $guarded = [];

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

Dan money_trades skema tabel

Schema::create('money_trades', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('mt_number');
        $table->unsignedBigInteger('user_id');
        $table->string('bank');
        $table->string('email');
        $table->string('mt_first_name');
        $table->string('mt_last_name');
        $table->string('password');
        $table->string('mt_account');
        $table->string('mt_deposit');
        $table->string('mt_leverage');
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
        $table->timestamps();
    });

Sepertinya money_trades_id masalahnya.

Adakah yang bisa membantu saya? Terima kasih banyak.


person Jemy    schedule 01.11.2020    source sumber
comment
Sepertinya Anda mendapatkan array kosong yang dikembalikan dari MoneyTrade::get('id'), dapatkah Anda memposting kode itu di sini. Atau buang hasilnya.   -  person gmfm    schedule 01.11.2020
comment
Saya mendapatkan kesalahan baru sekarang yang memiliki nilai tetapi seperti ini SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '[{"id":1}]' for column fssdb.money_trade_deposits.money_trades_id` di baris 1 (SQL: masukkan ke dalam nilai money_trade_deposits (mt_dep_number, amount, payment_method, money_trades_id, updated_at, created_at) (MTDepNumber-5f9f1f83d1a02, 1000, Perdagangan Uang, [{ id:1}], 01-11-2020 20:50:11, 01-11-2020 20:50:11))`   -  person Jemy    schedule 01.11.2020
comment
MoneyTrade::get('id') tampaknya mengembalikan objek array dengan properti id, mungkin mewakili semua baris money_trade di DB. Saya rasa ini bukan fungsi yang Anda cari di sini.   -  person gmfm    schedule 01.11.2020
comment
Oh begitu. Ketika saya mencoba membuang Anda benar, ia mengembalikan sebuah array. Bagaimana saya bisa mengubah baris kode ini untuk hanya mendapatkan id khusus dari tabel money_trades?   -  person Jemy    schedule 01.11.2020
comment
Bagaimana Anda mengetahui baris money_trade mana yang harus dikaitkan dengan baris money_trade_deposits yang mana? Apakah ini dibuat dalam permintaan yang sama?   -  person gmfm    schedule 02.11.2020
comment
Ya, atas permintaan yang sama. Saya hanya setelah baris id dari tabel money_trades untuk dimasukkan ke tabel money_trade_deposits saya sebagai money_trades_id. Saya tidak yakin bagaimana melakukan ini karena saya tidak tahu cara merevisi kode MoneyTrade::get('id'). Saya mencoba menggunakan MoneyTrade::find('id') tetapi ini tidak berhasil karena akan memberikan nilai nol.   -  person Jemy    schedule 02.11.2020
comment
Bisakah Anda memposting kode MoneyTrade?   -  person gmfm    schedule 02.11.2020
comment
Saya telah menambahkan referensi dari MoneyTrade. Saya sudah mencoba cara lain tetapi saya tidak tahu bagaimana cara memperbaikinya. Terima kasih banyak   -  person Jemy    schedule 02.11.2020
comment
setelah membuat baris money_trade baru dengan $moneyTrade->save(), Anda dapat memanggil $moneyTrade->id untuk mendapatkan id baris money_trade yang baru ditambahkan, ini adalah id yang direferensikan oleh money_trade_deposits.money_trades_id.   -  person gmfm    schedule 02.11.2020
comment
Baris ini menyebabkan kesalahan $moneyTradeDeposit->money_trades_id = MoneyTrade::get('id'); berikan nilai integer dan coba periksa, berhasil atau tidak   -  person sta    schedule 02.11.2020
comment
Sayangnya, itu masih tidak berhasil. Di Schema saya memiliki $table->unsignedBigInteger('money_trade_id'); dan saya masih mendapatkan kesalahan yang sama SQLSTATE[22007]: Format waktu tanggal tidak valid: 1366 Nilai bilangan bulat salah: '[{id:1}]' untuk kolom fssdb.money_trade_deposits.money_trades_id` di baris 1 (SQL: masukkan ke dalam nilai money_trade_deposits (mt_dep_number, amount, payment_method, money_trades_id, update_at, create_at) (MTDepNumber-5f9f1f83d1a02, 1000, MoneyTrade, [{id:1}], 01-11-2020 20:50:11, 01-11-2020 20:50:11))`   -  person Jemy    schedule 03.11.2020
comment
Bagaimana cara mengubah $moneyTradeDeposit-›money_trades_id = MoneyTrade::get('id'); karena saya sekarang yakin itu benar-benar menyebabkan kesalahan?   -  person Jemy    schedule 03.11.2020
comment
$moneyTradeDeposit->money_trades_id hanya menerima nilai integer, seperti $moneyTradeDeposit->money_trades_id = 1;   -  person sta    schedule 03.11.2020


Jawaban (1)


Bisakah Anda mencoba dengan

MoneyTrade::get()->id;

Untuk melihat apakah ia mengembalikan Nilai (dalam hal ini: 1)?

Hernan.

PD: saya melihat bahwa jumlah Skema adalah bilangan bulat dan dalam metode penyimpanan Anda memvalidasi sebuah string.

person Hernán Martinez Reumann    schedule 01.11.2020
comment
Hai Hernan! Saya telah mencoba ini dan mengubah jumlahnya menjadi integer dan tidak ada kesalahan saat melempar. Namun itu masih tidak disimpan ke database karena alasan tertentu. - person Jemy; 02.11.2020