我有SQL数据库中的现有数据,我想更新这些数据以更新我正在创建的laravel项目中的成员资格。我想要一个user_id
将我的users
表链接到我的money_trades
表的外键。
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->integer('mt_deposit');
$table->integer('mt_renewFee');
$table->string('mt_leverage');
$table->string('expiry_date');
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
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', 'integer', 'max:1000000', 'min:500'],
'mt_renewFee' => ['required', 'integer', 'max:1000000'],
'mt_leverage' => ['required', 'string', 'max:255'],
'expiry_date' => ['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_renewFee = $request->input('mt_renewFee');
$moneyTrade->mt_leverage = $request->input('mt_leverage');
$moneyTrade->expiry_date = $request->input('expiry_date');
$moneyTrade->user_id = auth()->id();
$moneyTrade->save();
//send mail
Mail::to($moneyTrade->user->email)->send(new MoneyTradeMail($moneyTrade));
return redirect()->route('mt.view')->withMessage('MoneyTrade Account Created');
}
}
MoneyTradeController.php update
public function update(Request $request, MoneyTrade $moneyTrade)
{
dd($request);
$request->validate([
'bank' => ['required', 'string', 'max:255'],
'mt_number' => ['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', 'integer', 'max:1000000', 'min:500'],
'mt_renewFee' => ['required', 'integer', 'max:1000000'],
'mt_leverage' => ['required', 'string', 'max:255'],
'expiry_date' => ['required', 'string', 'max:255'],
]);
$moneyTrade->bank = $request->input('bank');
$moneyTrade->mt_number = $request->input('mt_number');
$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_renewFee = $request->input('mt_renewFee');
$moneyTrade->mt_leverage = $request->input('mt_leverage');
$moneyTrade->expiry_date = $request->input('expiry_date');
$moneyTrade->user_id = auth()->id();
$moneyTrade->save();
return redirect()->route('mt.view')->withMessage('MoneyTrade Account Renewed');
}
与web.php相关的路由
Route::resource('moneytrade', 'MoneyTradeController')->middleware('auth');
Route::patch('/account-renew', 'MoneyTradeController@update')->name('mt.update')->middleware('auth');
Route::get('/trading-account', 'MoneyTradeController@view')->name('mt.view')->middleware('auth');
Route::get('/renew', 'MoneyTradeController@renew')->name('mt.renew')->middleware('auth');
当我尝试更新时,什么也没有发生,但是我没有遇到任何错误。update
我的控制器中的功能代码缺少什么?任何建议和帮助将不胜感激。谢谢。
首先,您的验证没有通过,这就是为什么您被重定向。现在,第二个问题是路由模型绑定。您的路线模型绑定无效。绑定对象是新对象,这就是为什么要在db中保存新条目。你的路线是
Route::resource('moneytrade', 'MoneyTradeController')->middleware('auth');
Route::patch('/account-renew/{moneytrade}', 'MoneyTradeController@update')->name('mt.update')->middleware('auth');
看看你的URI moneytrade是moneytrade
,但在您的控制器要绑定的对象为moneyTrade
地方T
就是资本。在路由模型绑定中,Laravel期望uri段和绑定对象相同。否则,模型绑定将不起作用。如果您dd
的$moneyTrade
对象是空的。因此,这里的解决方案是更改url或控制器对象。如果您改变路线,他们会像
Route::resource('money-trade', 'MoneyTradeController')->middleware('auth');
or
Route::resource('moneyTrade', 'MoneyTradeController')->middleware('auth');
Route::patch('/account-renew/{moneyTrade}', 'MoneyTradeController@update')->name('mt.update')->middleware('auth');
而且您不必更改控制器代码。如果要更改控制器而不是路由,则您的控制器将是
public function update(Request $request, MoneyTrade $moneytrade)
{
dd($moneytrade);
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句