将数据添加到数据库失败且没有错误 - Laravel

Posted

技术标签:

【中文标题】将数据添加到数据库失败且没有错误 - Laravel【英文标题】:Adding data to DB fails without an error - Laravel 【发布时间】:2017-03-05 09:25:20 【问题描述】:

我在向数据库添加信息时遇到问题。我没有收到任何错误,但是每次我尝试验证或将信息添加到表 Kids 时,我都会被重定向到主页“/”并且没有添加任何内容。我真的希望你能帮助我:

页面控制器:

    <?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Kids;
use App\Guardians;
use App\Donations;
use App\Expenses;
use App\Food;
use App\Medicines;
use App\Inventory;
use App\User;
use App\Http\Requests;
use App\Http\Controllers\Controller;


class PagesController extends Controller


     public function viewAddPage()

        return view('add');
    

    public function storeKids(Request $request)
    
    $validation= array(
                      'KidID'=>'required',
                      'fname'=>'required',
                      'lName'=>'required',
                      'DateOfBirth'=>'required',
                      'Sex'=>'required',
                      'Age'=>'required',
                      'SchoolName'=>'required',
                      'SchoolGrade'=>'required',
                      'SchoolGroup'=>'required',
                      'BloodType'=>'required',
                      'Allergies'=>'required',
                      'enroll_date'=>'required',
                      'exit_date'=>'required',
                      'created_by'=>'required',
                      'updated_by'=>'required'

                          );
        $v1= Validator::make(Input::all(),$validation);

        if( $v1->fails())
        
        return Redirect::to('add/list/')->withErrors($v1);
        
        else
         $poststudent=$request->all();
          $data = array('KidID'=>$poststudent['KidID'],
                         'fname'=>$poststudent['fname'],
                         'mName'=>    $poststudent['mName'],
                    'lName'=>    $poststudent['lName'], 
                         'DateOfBirth'=>   $poststudent['DateOfBirth'],
                         'Sex'=>   $poststudent['Sex'],
                         'Age'=>   $poststudent['Age'],
                         'SchoolName'=>   $poststudent['SchoolName'],
                         'SchoolGrade'=>   $poststudent['SchoolGrade'],
                         'SchoolGroup'=>   $poststudent['SchoolGroup'],
                         'BloodType'=>   $poststudent['BloodType'],
                         'Allergies'=>   $poststudent['Allergies'],
                         'enroll_date'=>   $poststudent['enroll_date'],
                         'exit_date'=>   $poststudent['exit_date'],
                         'created_by'=>   $poststudent['created_by'],
                         'updated_by'=>   $poststudent['updated_by']

                         );

        $check=0;
        $check=DB::table('kids')->insert($data);

        if($check > 0)
        
        return Redirect::to('kids/list/');
        
        else
        
        return Redirect::to('add/list/');
        

        
    

web.php(路由):

<?php
Route::get('/', function()
return view('welcome');
);

Route::post('/signin',[
'uses'=>'UserController@postSignIn',
'as'=>'signin'
]);

Route::get('user/logout',function()
Auth::logout();
return redirect('/');
);

Route::get('/home', [
'uses'=> 'UserController@getDashboard',
'as'=> 'home'
]);

Route::get('kids/list', 'PagesController@viewKidsList');
Route::get('guardians/list', 'PagesController@viewGuardiansList');
Route::get('donations/list', 'PagesController@viewDonationsList');
Route::get('expenses/list', 'PagesController@viewExpensesList');
Route::get('food/list', 'PagesController@viewFoodList');
Route::get('medicines/list', 'PagesController@viewMedicinesList');
Route::get('inventory/list', 'PagesController@viewInventoryList');
Route::get('users/list', 'PagesController@viewUsersList');
Route::get('add/list','PagesController@viewAddPage');
Route::post('/save', array('uses'=>'PagesController@storeKids'));

查看(add.blade.php):

@extends('menu')

@section ('add')

<style>

.imagen
width:400px;
height:auto;
margin-top: 10px;
margin-left: 40px;
margin-bottom: 10px;


.user
position:absolute;
margin-top: -70px;
right:20px;
font-size:14px;
font-family:"courier";


</style>

        <form class ="form" action="<?=URL::to('/save')?>" method="POST">
        <h3><center>New kid Information</center></h3>

             <input type="hidden" name="_token" value=" csrf_token() ">
             <div class="form-group">
                <input type="text" name="KidID" id="KidID" placeholder="Kid ID" class = "form-control">

                <br>

                <input class="form-control" type="text" name="fname" id="fname" placeholder="First Name">
                <br>

                <input class="form-control" type="text" name="mName" id="mName" placeholder="Middle Name">
                <br>

                <input class="form-control" type="text" name="lName" id="lName" placeholder="Last Name">
                <br>

                <input class="form-control" type="text" name="DateOfBirth" id="DateOfBirth" placeholder="Date Of Birth">
                <br>

                <input class="form-control" type="text" name="Sex" id="Sex" placeholder="Sex">
                <br>

                <input class="form-control" type="text" name="Age" id="Age" placeholder="Age">
                <br>

                <input class="form-control" type="text" name="SchoolName" id="SchoolName" placeholder="School Name">
                <br>

                <input class="form-control" type="text" name="SchoolGrade" id="SchoolGrade" placeholder="School Grade">
                <br>

                <input class="form-control" type="text" name="SchoolGroup" id="SchoolGroup" placeholder="School Group">
                <br>

                <input class="form-control" type="text" name="BloodType" id="BloodType" placeholder="Blood Type">
                <br>

                <input class="form-control" type="text" name="Allergies" id="Allergies" placeholder="Allergies">
                <br>

                <input class="form-control" type="text" name="enroll_date" id="enroll_date" placeholder="Enroll Date">
                <br>
                 <input class="form-control" type="text" name="exit_date" id="exit_date" placeholder="Enroll Date">
                <br>

                <input class="form-control" type="text" name="created_by" id="created_by" placeholder="Created By">
                <br>
                 <input class="form-control" type="text" name="updated_at" id="updated_at" placeholder="Enroll Date">
                <br>
           <input type="submit" value="Submit" name="save" class="text" />

        </form>
@endsection

儿童桌:

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateKidsTable extends Migration


public function up()

    Schema::create('kids', function (Blueprint $table) 
        $table->increments('id');
        $table->integer('KidID')->unique();
        $table->string('fname');
        $table->string('mName');
        $table->string('lName');
        $table->date('DateOfBirth');
        $table->string('Sex');
        $table->tinyInteger('Age');
        $table->string('SchoolName');
        $table->tinyInteger('SchoolGrade');
        $table->char('SchoolGroup');
        $table->string('BloodType');
        $table->longText('Allergies');
        $table->date('enroll_date');
        $table->date('exit_date');
        $table->string('created_by');
        $table->timestamps();
    );


 public function down()

    Schema::drop('kids');

孩子们

namespace App;

use Illuminate\Database\Eloquent\Model;

class Kids extends Model


protected $table = 'kids';


我一直在寻找这个问题好几天,我真的不知道为什么它没有存储任何内容,并且它一直将我发送到“/”网页。

【问题讨论】:

在 pagesController 中使用 DB,目前在您的代码中不可用 【参考方案1】:

如果您将可填充数组添加到您的 Kids 模型中

protected $fillable = ['fName', 'mName','lName'...];

然后你可以用 eloquent 插入记录,这比查询生成器简单得多:

$kids = Kids::create($request->all());

您的验证器非常复杂,因此将其移至 FormRequest:

php artisan make:request KidsRequest

将验证数组添加到Requests\KidsRequest 中的rules() 方法,并确保将authorize() 方法设置为返回true。

您现在可以在 store 方法中输入提示:

public function storeKids(KidsRequest $request)

您的验证将被自动应用。

所以现在我们有以下方法:

public function storeKids(KidsRequest $request)

        $kids = Kids::create($request->all());

        return Redirect::to('add/list/');      

我想你会同意它更整洁!

您的代码有点不正统,如果您坚持命名约定:index()show()store()edit() 等,您可以使用资源路由来代替,这样您就不必单独列出每条路由,并尽量保持你的字段名称在你的 db 格式上一致,在 laravel 中,蛇形大小写(例如 last_name)是首选 db 字段。

如果您难以理解其中的一些内容,那么laracasts 上有一些出色的教程

【讨论】:

非常感谢您的回答!我遵循了所有步骤,但仍然遇到相同的错误:(它一直将我发送到作为主要页面的“/”页面。它没有验证也没有添加任何东西 你添加了middleware吗?另外,尝试放置一个 dd();在您的KidsRequestrules() 方法中,它是否仍会重定向您? 我没有添加任何中间件。我添加了 dd();到 rules() 仍然得到同样的错误。 一开始我有一个Route::get('/', function() return view('welcome'); 一开始我有一个 Route::get('/', function() return view('welcome'););【参考方案2】:

确保您需要遵循@craig_h 的回答,并注意您在验证声明中需要updated_by,并且它不是在迁移中进行的 所以你必须添加它

【讨论】:

【参考方案3】:

您应该在代码中的某些位置添加dd(),以确保您确实达到了良好的控制器操作。我怀疑你的路由有问题,可能是一些 auth 中间件或其他东西。

【讨论】:

以上是关于将数据添加到数据库失败且没有错误 - Laravel的主要内容,如果未能解决你的问题,请参考以下文章

画布:drawImage 方法失败且没有错误

我正在尝试将值添加到数据库中,但每次我尝试添加一些东西时,我都会收到错误消息“连接必须有效且打开。”

Data Pump Export 数据泵导出因ORA-31693 ORA-02354 和 ORA-01555 错误且没有LOB损坏而失败 (Doc ID 1507116.1)

由于“错误:‘URLSession’类型的值没有成员‘数据’”,将 Vapor 应用程序部署到 Heroku 失败

Laravel classloader.php 错误打开流失败:没有这样的文件或目录

保存到数据存储失败:操作无法完成。 (可可错误 133020。)