Laravel - Как реализовать поиск из контроллера и просмотра - PullRequest
0 голосов
/ 11 февраля 2020

Я использую Laravel -5,8 для веб-приложения. У меня есть этот класс модели:

class HrEmployee extends Model
{
  protected $table = 'hr_employees';

  protected $fillable = [
              'employee_code',
              'address',
              'company_id',
              'email',
              'employment_date',
              'first_name',
              'last_name',
              'local_government_id',
              'nationality_id',
              'other_name',
              'password',
              'phone',
              'resignation_date',
              'is_hod',
              'department_id',
          ];

protected $dates = [
    'created_at',
    'updated_at',
    'date_of_birth',
    'employment_date',
    'resignation_date',
];

public function company()
{
    return $this->belongsTo('App\Models\Organization\OrgCompany','company_id');
}

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

public function fullName()
{
    return $this->first_name . ' ' . $this->other_name . ' ' . $this->last_name;
}  
}

Контроллер

class HrEmployeesController extends Controller
{
 public function index()
 {
    $userCompany = Auth::user()->company_id;

    if (Auth::user()->hasRole('Super Admin')) {
        $employees = HrEmployee::paginate(6);
    } else {
        $employees = HrEmployee::where('company_id', $userCompany)->paginate(6);
    }
    return view('hr.employees.index')->with('employees', $employees);
 }
}

просмотр

<table class=" table table-bordered table-striped table-hover datatable">
    <thead>
        <tr>

            <th width="10">
                #
            </th>
            <th>Name</th>
            <th>Email</th>
            <th>Employee Code </th>
            <th>Designation</th>
            <th>Department</th>
            <th>Employment Date</th>
            <th>Actions</th>
        </tr>
    </thead>
    <tbody>
        @foreach($employees as $key => $employee)
                <td>
                    {{$key+1}}
                </td>
                <td>
                    {{$employee->first_name}} {{$employee->last_name}}
                </td>
                <td>
                    {{$employee->email}}
                </td>
                <td>
                    {{isset($employee->employee_code) ? $employee->employee_code : ''}}
                </td>
                <td>
                    {{isset($employee->designation) ? $employee->designation->designation_name : ''}}
                </td>
                <td>
                    {{isset($employee->department) ? $employee->department->dept_name : ''}}
                </td>
                <td>
                    {{$employee->employment_date ? Carbon\Carbon::parse($employee->employment_date)->format('d-m-Y') : 'N/A' }}


        </tr>
        @endforeach 
    </tbody>
</table>

Я хочу, чтобы пользователи могли осуществлять поиск по Имени (имя_символа и фамилия_имя) ) - текстовое поле, отдел - выпадающий список и employee_code - текстовое поле. Когда пользователь закончил, он нажимает кнопку отправки, после чего отображается результат.

Как реализовать это как с контроллера, так и с представления.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

вы можете добавить $ request var или просто использовать $ _GET для индексной функции, чтобы получить параметр / запрос поиска и использовать где "LIKE" для фильтрации ваших данных

сделать форму в вашем представлении

<form action="">
  <div class="input-group col-md-4">
     <input type="text" name="s" class="form-control" value="{{ $_GET['s'] ?? '' }}" placeholder="Search something...">
       <span class="input-group-btn">
          <button class="btn btn-default" type="submit">Search!</button>
       </span>
  </div>
</form>

и ваш контроллер на функции индекса

$s = ($_GET['s']??'');

$employees = HrEmployee::where(function($q){
    $q->where('first_name','LIKE','%'.$s.'%')->orWhere('last_name','LIKE','%'.$s.'%');
})->paginate(10)->appends($_GET);
0 голосов
/ 11 февраля 2020

Я пытаюсь дать вам код, который я всегда делаю, в вашем блейде добавьте этот код

{{ Form::open(['action'=> 'HrEmployeesController@search',  'method'=>'POST'])  }} 

 <label>Barcode :   {{Form::text('FirstName','',['class'=>'form-control', ])}} </label>
 {{Form::submit('Submit',['class'=>'btn btn-primary btn-sm button'])}} 
 {{Form::close()}}

, а в вашем контроллере добавьте функцию поиска

 public function search(Request $request)
    {
        //
        $employees = HrEmployee::where('first_name','like',"%".$request->input('FirstName')."%")->paginate(6)
          return view('hr.employees.index')->with('employees', $employees);     
    }

и добавьте ее к вашему Интернет. php

Route::post('employees/Search','HrEmployeesController@search');

Вы можете понять идею, которую я даю, и надеюсь, что она поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...