SQLSTATE [22007]: รูปแบบวันที่และเวลาไม่ถูกต้อง: 1366 ค่าจำนวนเต็มไม่ถูกต้อง Laravel 7

ฉันกำลังพยายามสร้างความสัมพันธ์ระหว่าง 2 ตาราง money_trade และ money_trade_deposits สคีมาของฉันในตาราง money_trade_deposits คือ:

 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');
}

โมเดล MoneyTradeDeposit.php ของฉันมี

protected $table = 'money_trade_deposits';

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

มุมมองเบลดของฉันมีโมดอลที่จ่ายอินพุตเป็น amount และ payment_method ตอนนี้ฉันกำลังพยายามดึง id จากตาราง money_trade ของฉัน และแทรกลงในตาราง money_trade_deposits ของฉันเป็น money_trades_id อย่างไรก็ตาม ฉันได้รับข้อผิดพลาดนี้ เมื่อฉันดัมพ์ $request ฉันสามารถรับค่าได้ แต่เมื่อฉันดัมพ์ $moneyTradeDeposit ฉันได้รับข้อผิดพลาดทั้งหมด:

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))

เมื่อฉัน dd($request) ฉันได้รับ

ป้อนคำอธิบายรูปภาพที่นี่

เมื่อฉันทำ dd($moneyTradeDeposit); ฉันได้รับ

ป้อนคำอธิบายรูปภาพที่นี่

MoneyTradeController.php สำหรับการอ้างอิงของฉันมีวิธีการ store ซึ่งก็คือ

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');
}

และรุ่น MoneyTrade.php

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

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

และสคีมาตาราง money_trades

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();
    });

ดูเหมือนว่า money_trades_id คือปัญหา

ใครสามารถช่วยฉันหน่อยได้ไหม? ขอบคุณมาก.


person Jemy    schedule 01.11.2020    source แหล่งที่มา
comment
ดูเหมือนว่าคุณได้รับอาร์เรย์ว่างที่ส่งคืนจาก MoneyTrade::get('id') คุณช่วยโพสต์โค้ดนั้นที่นี่ได้ไหม หรือทิ้งผลลัพธ์   -  person gmfm    schedule 01.11.2020
comment
ตอนนี้ฉันได้รับข้อผิดพลาดใหม่ซึ่งมีค่า แต่มันเป็นเช่นนี้ SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '[{"id":1}]' for column fssdb.money_trade_deposits.money_trades_id` ที่แถว 1 (SQL: แทรกลงในค่า money_trade_deposits (mt_dep_number, amount, payment_method, money_trades_id, updated_at, created_at) (MTDepNumber-5f9f1f83d1a02, 1000, Money การค้า [{ รหัส:1}], 2020-11-01 20:50:11, 2020-11-01 20:50:11))`   -  person Jemy    schedule 01.11.2020
comment
MoneyTrade::get('id') ดูเหมือนจะส่งคืนออบเจ็กต์อาร์เรย์ที่มีคุณสมบัติ id ซึ่งอาจเป็นตัวแทนแถว money_trade ทั้งหมดในฐานข้อมูล ฉันไม่คิดว่านี่คือฟังก์ชันที่คุณกำลังมองหาที่นี่   -  person gmfm    schedule 01.11.2020
comment
อ้อเข้าใจแล้ว. เมื่อฉันพยายามดัมพ์คุณพูดถูก มันจะส่งคืนอาร์เรย์ ฉันจะเปลี่ยนบรรทัดโค้ดนี้เพื่อรับเฉพาะ id จากตาราง money_trades ได้อย่างไร   -  person Jemy    schedule 01.11.2020
comment
คุณจะรู้ได้อย่างไรว่า money_trade แถวใดควรเชื่อมโยงกับ money_trade_deposits แถวใด สิ่งเหล่านี้ถูกสร้างขึ้นในคำขอเดียวกันหรือไม่   -  person gmfm    schedule 02.11.2020
comment
ใช่ตามคำขอเดียวกัน อยู่หลังแถว id จากตาราง money_trades เพื่อใส่ลงในตาราง money_trade_deposits ของฉันเป็น money_trades_id ฉันไม่แน่ใจว่าต้องทำอย่างไร เนื่องจากฉันไม่รู้วิธีแก้ไขโค้ด MoneyTrade::get('id') ฉันลองใช้ MoneyTrade::find('id') แต่ไม่ได้ผลเนื่องจากจะให้ค่าว่าง   -  person Jemy    schedule 02.11.2020
comment
คุณสามารถโพสต์รหัส MoneyTrade ได้หรือไม่   -  person gmfm    schedule 02.11.2020
comment
ฉันได้เพิ่มข้อมูลอ้างอิงจาก MoneyTrade แล้ว ฉันได้ลองวิธีอื่นแล้ว แต่ฉันไม่รู้วิธีแก้ไขจริงๆ ขอบคุณมาก   -  person Jemy    schedule 02.11.2020
comment
หลังจากสร้างแถว money_trade ใหม่ด้วย $moneyTrade->save() คุณสามารถโทร $moneyTrade->id เพื่อรับ id ของแถว money_trade ที่เพิ่มใหม่ นี่คือ id ที่ money_trade_deposits.money_trades_id อ้างอิงถึง   -  person gmfm    schedule 02.11.2020
comment
บรรทัดนี้ทำให้เกิดข้อผิดพลาด $moneyTradeDeposit->money_trades_id = MoneyTrade::get('id'); ให้ค่าจำนวนเต็มและลองตรวจสอบ ใช้งานได้หรือไม่   -  person sta    schedule 02.11.2020
comment
น่าเศร้าที่มันยังใช้งานไม่ได้ ใน Schema ของฉัน ฉันมี $table->unsignedBigInteger('money_trade_id'); และฉันยังคงได้รับข้อผิดพลาดเดิม SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value: '[{id:1}]' for column fssdb.money_trade_deposits.money_trades_id` ที่แถว 1 (SQL: แทรกลงใน money_trade_deposits (mt_dep_number, จำนวนเงิน, วิธีการชำระเงิน, money_trades_id, อัปเดต_at, สร้างขึ้น_at) ค่า (MTDepNumber-5f9f1f83d1a02, 1000, MoneyTrade, [{id:1}], 2020-11-01 20:50:11, 2020-11-01 20:50:11))`   -  person Jemy    schedule 03.11.2020
comment
ฉันจะเปลี่ยน $moneyTradeDeposit->money_trades_id = MoneyTrade::get('id'); ได้อย่างไร เพราะตอนนี้ฉันแน่ใจว่ามันทำให้เกิดข้อผิดพลาดจริงๆ?   -  person Jemy    schedule 03.11.2020
comment
$moneyTradeDeposit->money_trades_id ยอมรับเฉพาะค่าจำนวนเต็ม เช่น $moneyTradeDeposit->money_trades_id = 1;   -  person sta    schedule 03.11.2020


คำตอบ (1)


ลองด้วยได้มั้ยคะ

MoneyTrade::get()->id;

เพื่อดูว่าจะส่งคืนค่า (ในกรณีนี้: 1) หรือไม่?

เฮอร์นัน.

PD: ฉันเห็นว่าในจำนวน Schema เป็นจำนวนเต็มและในวิธีการจัดเก็บคุณตรวจสอบสตริง

person Hernán Martinez Reumann    schedule 01.11.2020
comment
สวัสดีเฮอร์นัน! ฉันได้ลองแล้วและเปลี่ยนจำนวนเป็น integer และตอนนี้ไม่มีข้อผิดพลาดเกิดขึ้น อย่างไรก็ตาม มันยังคงไม่บันทึกลงฐานข้อมูลด้วยเหตุผลบางประการ - person Jemy; 02.11.2020