首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel -如何在提交时使用多巴胺过滤记录

Laravel -如何在提交时使用多巴胺过滤记录
EN

Stack Overflow用户
提问于 2020-12-01 15:58:00
回答 3查看 233关注 0票数 0

在我的Laravel-5.8项目中,我有这样的代码:

型号:

代码语言:javascript
复制
class HrEmployee extends Model
{
    protected $table = 'hr_employees';
    protected $primaryKey = 'id';

    protected $fillable = [
                  'id',
                  'department_id',
                  'first_name',
                  'last_name',
              ];

    public function department()
    {
        return $this->belongsTo('App\Models\Hr\HrDepartment','department_id','id');
    }  
}

控制器中的退滤器使用hr_employees表使用department_id过滤

主计长:

代码语言:javascript
复制
public function index(Request $request)
{
  $employeedatas = HrEmployee::where('status', 1)->get();
  $deptfilters = HrDepartment::where('status', 1)->pluck('department_name','id');

  return view('hr.employees.index')
    ->with('deptfilters', $deptfilters)
    ->with('employeedatas', $employeedatas);
}

视图

代码语言:javascript
复制
<div class="container">
  <br>
  <form action="ViewPages" method="POST" enctype="multipart/form-data">
    @csrf
    <div class="container">
      <div class="row">
        <label for="from" class="col-form-label">Department</label>
        <div class="col-md-2">
          <select id="department" name="department" class="form-control">
            <option value="">--- Select department ---</option>
            @foreach ($department as $key => $value)
            <option value="{{ $key }}" {{ old( 'department')==$ key ? 'selected' : ''}}>{{ $value }}</option>
            @endforeach
          </select>
        </div>
        <div class="col-md-4">
          <button type="submit" class="btn btn-primary btn-sm" name="search">Search</button>
        </div>
      </div>
    </div>
  </form>
  <br>
  <table class="table table-dark">
    <tr>
      <th>id</th>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Department</th>
    </tr>
    @foreach ($employeedatas as $employeedata)
    <tr>
      <td>{{ $employeedata->id }}</td>
      <td>{{ $employeedata->first_name }}</td>
      <td>{{ $employeedata->last_name }}</td>
      <td>{{ $employeedata->department->department_name }}</td>
    </tr>
    @endforeach
  </table>
</div>

从代码来看,每个部门都有许多员工。我想要实现的是:

默认情况下,下拉列表应该加载部门,其中= 1

当提交搜索按钮时,我希望表是包含基于下拉列表中的.的记录的字段。

我如何修改我的控制器和查看代码来实现这一点?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-12-01 16:55:51

通常,在使用Laravel约定时,不需要使用$table和$id属性

代码语言:javascript
复制
class HrEmployee extends Model
{
    //protected $table = 'hr_employees';//Laravel by default expect table name 'hr_employees'
    //protected $primaryKey = 'id';//Laravel by default expect primary_key on table is id column

    protected $fillable = [
                  'id',
                  'department_id',
                  'first_name',
                  'last_name',
              ];

    public function department()
    {
        //return $this->belongsTo('App\Models\Hr\HrDepartment','department_id','id');
        return $this->belongsTo('App\Models\Hr\HrDepartment');//No Need for override foreign key and owner key when you are using laravel conventions
    }  
}

在控制器中

代码语言:javascript
复制
public function index(Request $request)
{
  $employees = HrEmployee::where('status', 1);
  if($request->input('department_id')){
     $employees->where('department_id',$request->input('department_id'))
  }
  $employees=$employees->get();
  $departments = HrDepartment::where('current_year',1)->where('status', 1)->pluck('department_name','id');

  return view('hr.employees.index')
    ->with('departments', $departments)
    ->with('employees', $employees);
}

在视图中筛选器使用GET不POST方法

代码语言:javascript
复制
<div class="container">
  <br>
  <form method="get">
    <div class="container">
      <div class="row">
        <label for="from" class="col-form-label">Department</label>
        <div class="col-md-2">
          <select id="department" name="department_id" class="form-control">
            <option value="">--- Select department ---</option>
            @foreach ($departments as $id => $name)
            <option value="{{ $id }}" {{ request('depratment_id')==$id ? 'selected' : ''}}>{{ $name }}</option>
            @endforeach
          </select>
        </div>
        <div class="col-md-4">
          <button type="submit" class="btn btn-primary btn-sm" name="search">Search</button>
        </div>
      </div>
    </div>
  </form>
  <br>
  <table class="table table-dark">
    <tr>
      <th>id</th>
      <th>First Name</th>
      <th>Last Name</th>
      <th>Department</th>
    </tr>
    @foreach ($employees as $employee)
    <tr>
      <td>{{ $employee->id }}</td>
      <td>{{ $employee->first_name }}</td>
      <td>{{ $employee->last_name }}</td>
      <td>{{ optional($employee->department)->department_name }}</td>
    </tr>
    @endforeach
  </table>
</div>
票数 1
EN

Stack Overflow用户

发布于 2020-12-01 16:24:35

使用Ajax将数据根据筛选器值传递给控制器,您应该在不刷新页面的情况下返回过滤器的结果。

请参阅此https://www.webslesson.info/2019/07/implement-custom-search-filter-in-laravel-58-datatable-using-ajax.html?m=1

票数 0
EN

Stack Overflow用户

发布于 2020-12-01 16:24:52

代码语言:javascript
复制
public function index(Request $request)
{
    //Build initial query to fetch employee data
    $employeeQuery = HrEmployee::query()->where('status', 1);

    //If a department has been selected by user
    //filter the employee data by the selected department_id
    if(!empty($request->department)) {
        $employeeQuery->where('department_id', $request->department);          
    }

    //Get the employee data by executing the $employeeQuery
    $employeedatas = $employeeQuery->get();

    //Get all the departments where current_year = 1
    //if current_year is not a column on the departments table
    //replace where('current_year', 1) with whereYear('created_at',now()->format('Y'))
    //replace 'created_at' with whichever date column you want to compare with current year
    $deptfilters = HrDepartment::where('status', 1)
        ->where('current_year', 1)
        ->pluck('department_name','id');

  return view('hr.employees.index')
    ->with('deptfilters', $deptfilters)
    ->with('employeedatas', $employeedatas);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65093979

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档