如何通过laravel中的控制器将数据保存在数据库中
Posted
技术标签:
【中文标题】如何通过laravel中的控制器将数据保存在数据库中【英文标题】:How to save the data in database via controller in larval 【发布时间】:2021-11-06 16:54:12 【问题描述】:我不知道错误在哪里,数据没有保存到数据库中。任何人都可以帮助我将其全部使用。我被困在这些天了。提前谢谢你。
我的路线
Route::get('/reject','RejectionReasonsController@index');
Route::post('/reject','RejectionReasonsController@store');
我的控制器(RejectionReasonsController)
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class RejectionReasonsController extends Controller
public function index()
$record = RejectionReason::all();
return view('reject');
public function store(Request $request)
$record= new RejectionReason();
$record->reason_title = request('reason_title');
$record->save();
return redirect('/routes');
我的模型文件(拒绝原因)
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class RejectionReasons extends Model
protected $fillable = ['reason_title'];
我的刀片文件(reject.blade.php)
<div class="form-check">
<form action="/store" class="textbox" method="POST">
<h5><b> Select Reasons: </b></h5>
<input type="checkbox" id="rejectReason1" name='reason_title[]' value='No responce'> No responce <br>
<label for="Rejection">
<input type="checkbox" id="rejectReason2" name='reason_title[]' value='Skills mismatch'> Skills mismatch
</label>
<br />
<div id="txtReasonRejected1" style="display: none">
<input type="text" id="Reasons1" />
</div>
<input type="checkbox" id="rejectReason3" name='reason_title[]' value='Culture mismatch'> Culture mismatch <br>
<input type="checkbox" id="rejectReason4" name='reason_title[]' value='Salary expectation mismatch'> Salary expectation mismatch <br>
<label for="Rejection">
<input type="checkbox" id="rejectReason5" name='reason_title[]' value='Not enough knowledge/inclination for ColoredCow'> Not enough knowledge/inclination for ColoredCow
</label>
<br />
<div id="txtReasonRejected2" style="display: none">
<input type="text" id="Reasons2" />
</div>
<button type="submit">Reject</button>
</form>
</div>
我不知道错误在哪里,数据没有保存到数据库中。任何人都可以帮助我将其全部使用。我被困在这些天了。提前谢谢你。
【问题讨论】:
首先将您的请求数据转储到控制器中,例如 dd($request); 由于您已将复选框的名称属性的值设置为数组 reason_title[],因此 $request->reason_title 的值将是一个字符串数组。如果要将其存储为一条记录,则需要使用 ',' 进行内爆,或者可以通过循环 $request->reason_title 来存储多条记录 除非你设置了另一个路由action="/store"
不会命中那个控制器方法。您的表单中还缺少@csrf
【参考方案1】:
如果您绝对确定表单中只有特定数量的“原因”,那么最好在数据库中为每个原因创建一列。即
class RejectionReasons extends Model
protected $fillable = ['reason_one','reason_two','reason_three' .......];
同样在你的 RejectionController 中,你应该在命名空间之后导入你的模型
<?php
namespace App\Http\Controllers;
user RejectionReason;
use Illuminate\Http\Request;
class RejectionReasonsController extends Controller
.......
是的,您的表单也缺少 @csrf 。
【讨论】:
【参考方案2】:首先像这样改变你的路线
Route::post('/reject','RejectionReasonsController@store')->name('reject.post');
然后在你的刀片中
<form action="route('reject.post')" class="textbox" method="POST">
@csrf
【讨论】:
页面由于不活动而过期。请刷新并重试。这是我得到的一个 刷新页面,点击网址或在私密窗口中打开 在表单标签下方添加@csrf csrf_field() 这可以吗?【参考方案3】:由于您已将复选框的name
属性的值设置为数组reason_title[]
,因此$request->reason_title
的值将是一个字符串数组
如果您希望它位于一条记录中,您可以将其存储为逗号分隔值(使用 implode
辅助函数)
public function store(Request $request)
$record= new RejectionReason();
$record->reason_title = implode(",", $request->reason_title);
$record->save();
return redirect('/routes');
如果您想将每个原因标题存储为新记录,您只需循环它
public function store(Request $request)
foreach($request->reason_title as $value)
$record= new RejectionReason();
$record->reason_title = $value;
$record->save();
return redirect('/routes');
【讨论】:
我应该从刀片文件中删除 reason_title 数组并运行吗? 这取决于您的用例。如果你想要多选,那么你需要将它保存为一个数组,否则它将是一个单一的选择。一次一个原因标题。只需在控制器中使用 dd($request) 打印请求,这将有助于您了解请求和数据流。 它抛出我的模型没有声明我如何解决这个问题 类声明前导入模型use App\Models\RejectionReasons;
【参考方案4】:
public function store(Request $request)
$record= new RejectionReason();
$record->reason_title = $request->reason_title;
$record->save();
return redirect('/routes');
你可以试试
如果你有更多的行,你可以运行一个循环
【讨论】:
点击拒绝后它不起作用。我认为表格有一些错误 你可以取一个数组。因此您可以将数据保存在数据库中的多个或逗号分隔符中。喜欢 implode($request->reason_title) 你可以在你的控制器中使用 dd($request->reasion_title) 。那你就明白了。 你的表单不正确试试看。跨度>以上是关于如何通过laravel中的控制器将数据保存在数据库中的主要内容,如果未能解决你的问题,请参考以下文章