【问题标题】:How to save the data in database via controller in larval如何通过laravel中的控制器将数据保存在数据库中
【发布时间】: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

标签: laravel eloquent model laravel-8


【解决方案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-&gt;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) 。那你就明白了。
    • @csrf
      你的表单不正确试试看。跨度>
    猜你喜欢
    • 2021-09-02
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2021-12-23
    • 1970-01-01
    相关资源
    最近更新 更多