【问题标题】:SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect integer value Laravel 7SQLSTATE [22007]:无效的日期时间格式:1366 整数值不正确 Laravel 7
【发布时间】:2021-02-14 13:57:58
【问题描述】:

我正在尝试在 2 个表 money_trademoney_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);
}

我的刀片视图有一个模式,它提供amountpayment_method 的输入。现在我正试图从我的money_trade 表中获取id 并将其作为money_trades_id 插入到我的money_trade_deposits 表中。但是我收到了这个错误。当我转储 $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 是问题所在。

谁能帮帮我?非常感谢。

【问题讨论】:

  • 看起来您从MoneyTrade::get('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 , amount, payment_method, money_trades_id, updated_at, created_at) 值 (MTDepNumber-5f9f1f83d1a02, 1000, MoneyTrade, [{"id":1}], 2020-11-01 20:50: 11, 2020-11-01 20:50:11))`
  • MoneyTrade::get('id') 似乎正在返回一个具有id 属性的数组对象,可能代表数据库中的所有money_trade 行。我认为这不是您要在这里寻找的功能。
  • 哦,我明白了。当我尝试转储您是对的时,它会返回一个数组。如何更改这行代码以仅从money_trades 表中获取id
  • 你怎么知道哪个money_trade行应该与哪个money_trade_deposits行相关联?这些是在同一个请求中创建的吗?

标签: sql database laravel foreign-keys


【解决方案1】:

你可以试试

MoneyTrade::get()->id;

查看它是否返回“值”(在本例中为:1)?

埃尔南。

PD:我看到架构中的数量是“整数”,而在存储方法中,您验证了一个“字符串”。

【讨论】:

  • 嗨,埃尔南!我试过这个并将金额更改为integer,现在没有错误抛出。但是由于某种原因它仍然没有保存到数据库中。
猜你喜欢
  • 2021-07-23
  • 2021-04-21
  • 1970-01-01
  • 2021-08-22
  • 2017-11-04
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 2017-12-10
相关资源
最近更新 更多