【发布时间】:2021-02-14 13:57:58
【问题描述】:
我正在尝试在 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 的输入。现在我正试图从我的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 columnfssdb.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