Laravel 动态下拉获取数据问题

Posted

技术标签:

【中文标题】Laravel 动态下拉获取数据问题【英文标题】:Laravel dynamic dropdown fetching data issues 【发布时间】:2020-08-03 23:42:07 【问题描述】:

我想在插入时根据 user_types 列出用户,所以我创建了两个表,每个表都有连接。每个模型 php 文件都有一个关系函数。我创建了 jquery 代码并创建了控制器功能,但它不起作用我不知道我在哪里犯了错误,请帮我解决这个问题。我附上了我写的所有代码和数据库。

用户类型数据库

用户数据库表

UserType Id 和 User Table usty_id 有连接

用户类型模型

<?php

namespace Asset_Management_System;

use Illuminate\Database\Eloquent\Model;

class UserType extends Model

    public function userpermission()
    
        return $this->hasMany('Asset_Management_System\UserPermission');
    

    public function user()
    
        return $this->hasMany('Asset_Management_System\User');
    

用户模型

class User extends Authenticatable
    

        public function usertype()
        
            return $this->belongsTo('Asset_Management_System\UserType','usty_id');
        

插入表格

<div class="form-group">
                                    <label>User Type</label>
                                    <select class="form-control select2" style="width: 100%;" id="ust_id" name="ust_id">
                                        <option selected="selected">Select User Type</option>
                                        @foreach($UserType as $ust)
                                            <option value="$ust->id">$ust->usty_name</option>
                                        @endforeach
                                    </select>
                                </div>

                                <div class="form-group">
                                    <label>User</label>
                                    <select class="form-control select2" style="width: 100%;" id="user_id" name="user_id">
                                        <option selected="selected">Select User</option>
                                        @foreach($User as $us)
                                            <option value="$us->id">$us->us_fname $us->us_lname</option>
                                        @endforeach
                                    </select>
                                </div>

控制器

public function show(Request $request)
    
        //echo $id;
        if (!$request->usty_id) 
            $html = '<option value="">'.trans('global.pleaseSelect').'</option>';
         else 
            $html = '';
            $user = User::where('usty_id', $request->usty_id)->get();
            foreach ($user as $us) 
                $html .= '<option value="'.$us->id.'">'.$us->us_fname.' '.$us->us_lname.'</option>';
            
        

        return response()->json(['html' => $html]);

    

还有 Jquery

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

    <script type="text/javascript">
        $("#ust_id").change(function()
            $.ajax(
                url: " route('WorkRequest.show') ?usty_id=" + $(this).val(),
                method: 'GET',
                success: function(data) 
                    $('#user_id').html(data.html);
                
            );
        );
    </script>

路线

Route::get('WorkRequest/show', 'WorkRequestController@show')->name('WorkRequest/show');

这是我进入表单时遇到的错误

缺少 [Route: WorkRequest.show] [URI: WorkRequest/WorkRequest] 的必需参数。 (查看:C:\xampp\htdocs\Asset_Management_Laravel\resources\views\layouts\main.blade.php)

请帮我解决这个问题

【问题讨论】:

在路由文件中,您已将“WorkRequest/show”写为路由名称,但在 ajax 代码中写了“WorkRequest.show”。代替 '。'在 ajax 方法中使用 '/' 哦,谢谢,现在路由错误已修复,但 fetch 无法正常工作,请帮助我 请分享 web.php 代码。我猜您还为“WorkRequest”声明了使用资源方法的路由 是的,我也有类似 Route::resource('WorkRequest','WorkRequestController'); 【参考方案1】:

此代码运行良好

<script type="text/javascript">

            $(document).ready(function()

                // Department Change
                $('#ust_id').change(function()

                    // Department id
                    var id = $(this).val();

                    // Empty the dropdown
                    $('#user_id').find('option').not(':first').remove();

                    // AJAX request
                    $.ajax(
                        url: " route('WorkRequest/show') ?usty_id=" + id,
                        type: 'get',
                        dataType: 'json',
                        success: function(response)

                            //alert(response);

                            $('#user_id').html(response.html);

                        
                    );
                );

            );


        </script>

public function show(Request $request)
    
        //echo $id;

            $html = '';
            $user = User::where('usty_id', $request->usty_id)->get();
            foreach ($user as $us)
            
                $html .= '<option value="'.$us->id.'">'.$us->us_fname.' '.$us->us_lname.'</option>';
            


        return response()->json(['html' => $html]);

    

【讨论】:

【参考方案2】:

把上面的Route替换成this-Route::post('workRequest/get_options','WorkRequestController@getOptions')-&gt;name('workRequest.options');,放到route::resource()路由上面

和ajax代码如下

   $("#ust_id").change(function()
        let parameter = 'usty_id': $(this).val();
        $.ajax(
            url: " route('workRequest.options') ",
            method: 'POST',
            data: parameter,
            success: function(data) 
                $('#user_id').html(data.html);
            
        );
    );

添加此 Controller 方法以获取选项

public function getOptions(Request $request)
    
        if (!$request->usty_id) 
            $html = '<option value="">'.trans('global.pleaseSelect').'</option>';
         else 
            $html = '';
            $user = User::where('usty_id', $request->usty_id)->get();
            foreach ($user as $us) 
                $html .= '<option value="'.$us->id.'">'.$us->us_fname.' '.$us->us_lname.'</option>';
            
        

        return response()->json(['html' => $html]);

    

【讨论】:

同样的错误来了 编辑了代码并添加了新方法,这样您就可以使用 GET WorkRequest.show 路由来显示刀片文件

以上是关于Laravel 动态下拉获取数据问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React Native expo 的下拉选项中动态获取 api 数据

laravel 5.4 数据库中的表单下拉列表

在 laravel 中使用 vue.js 获取动态字段数据

如何在从服务器获取数据的动态表的每一行中添加下拉列表?

如何从 Laravel 8 Jetstream 注册页面中的数据库中获取数据?

onclick 使用 ajax laravel 从数据库中获取数据