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')->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 数据