laravel - Laravel - 如何创建递归选择选项下拉列表
问题描述
我正在使用 Laravel-5.8 开发一个 Web 应用程序。我有这个模型:
class Staff extends Model
{
protected $fillable = [
'staff_code',
'manager_id',
'first_name',
'last_name',
];
public function manager()
{
return $this->belongsTo('App\Models\Staff','manager_id');
}
public function fullName()
{
return $this->staff_code . ' - ' . $this->first_name . ' ' . $this->last_name;
}
在创建员工数据时,我想从员工表中为每个员工选择一个经理,并将其作为 manager_id 保存到同一个表中,但显示为经理姓名。仍然来自同一张桌子。
控制器
public function create()
{
$managers = Staff::all();
return view('staff.create')
->with('managers', $managers);
}
看法
<div class="form-group">
<label class="control-label"> Manager:</label>
<select class="form-control select2bs4" data-placeholder="Choose Manager" tabindex="1" name="manager_id" style="width: 100%;">
<option value="">Select Line Manager</option>
@if($managers->count() > 0 )
@foreach($managers as $manager)
<option value="{{$manager->id}}">{{$manager->fullName}}</option>
@endforeach
@endif
</select>
</div>
我观察到下拉列表中没有加载任何内容。我该如何解决这个问题?
谢谢你。
解决方案
当你这样做时$manager->fullName
,你正在使用在这种情况下不存在的 Eloquent 关系。你应该改用这个:
$manager->fullName()
除此之外,我建议您针对这种特定情况使用Laravel 访问器。结果,您将在模型中拥有这样的代码:
public function getFullNameAttribute()
{
return $this->staff_code . ' - ' . $this->first_name . ' ' . $this->last_name;
}
所以我们可以重写视图中的代码如下:
@foreach($managers as $manager)
<option value="{{$manager->id}}">{{$manager->full_name}}</option>
@endforeach
推荐阅读
- c++ - 使用 Range v3 范围,如何将视图和操作组合到单个管道中?
- web-applications - 将网站迁移到新服务器,同时保留数据库状态
- javascript - 如何使用循环将数据推送到实时数据库
- r - 在 list2 中检测 list1 中是否包含任何字符串(整个或部分较大的字符串)
- php - 是什么阻止数据插入 CI?
- java - 如何使用插入排序对 ArrayList 进行排序?
- sql-server - 根据值过滤列并获取计数
- java - 为什么我的字符串数组长度是 3 而不是 2?
- rest - RESTCONF 中的 POST/PUT/PATCH 列表和叶子列表是否合法?
- php - 使用 GET 变量(使用 htaccess)将文件夹中的所有链接重定向到 index.php?