У меня есть 2 метода в ParticipantController. Индекс () показывает некоторую информацию обо всех регистрациях на конференции. Затем search () предназначен для формы поиска в представлении, чтобы отображать только в таблице результаты, в которых пользователь, выполнивший регистрацию, имеет имя, подобное имени, введенному пользователем в форме поиска:
class ParticipantController extends Controller
{
public function index($id){
$conference = Conference::find($id);
$conference->load('registrations.participants.answers.question');
return view('participants.index')->with('conference', $conference);
}
public function search($id, Request $request)
{
$name = $request->get('participant');
$conference = Conference::findOrFail($id);
$searchInfo = $conference->load([
'registrations.participants' => function ($query) use ($name) {
return $query->where('name', 'like', '%' . $name . '%');
},
'registrations.participants.answers.question'
]);
return view('participants.index', compact('conference'));
}
}
Маршруты, которые у меня есть для этих методов:
Route::get('conference/edit/{id}/participants', [ 'uses' => 'ParticipantController@index', 'as' => 'participants.index']);
Route::get('conference/edit/{id}/participants/search', [
'uses' => 'ParticipantController@search',
'as' => 'participants.search'
]);
Я сомневаюсь, как отобразить результаты поиска в представлении после того, как пользователь введет некоторые данные в форму поиска и нажмет «Поиск». Когда пользователь получает доступ к файлам members / index.blade.php, все регистрации уже перечислены в таблице с foreach ниже с использованием кода в методе index ():
@foreach($conference->registrations as $registration)
<tr>
<td>{{$registration->customer->name}} {{$registration->customer->surname}}</td>
<td>{{ $registration->status === 'C' ? 'Complete' : 'Incomplete' }}</td>
<td><a data-regid = "{{$registration->id}}"> More details</a></td>
</tr>
@endforeach
И все работает нормально, таблица показывает детали всех регистраций, например:
User that did the registration Quantity Status Details
Jake K 2 Complete Show
...
Но в этом представлении есть также форма поиска, я сомневаюсь, как отобразить в таблице результаты поиска, когда пользователь вводит имя в форму поиска и нажимает «Поиск».
HTML формы поиска в представлении:
<form action = "{{ route('participants.search', ['id' => $conference->id] )}}" method = "get">
<div class = "form-row">
<div class = "form-group col col-md-6">
<label for = "participant">Search</label>
<div class = "input-group">
<input type='text' name = "participant" class = "form-control" placeholder = "Name" />
</div>
</div>
</div>
</form>






Вы можете использовать таблицы данных Ссылка: https://github.com/yajra/laravel-datatables
Проверять . это решит вашу проблему.
Спасибо, вы знаете, где находится HTML-код для панели поиска и результатов на странице?
Проверьте файлы js. Поле поиска и результаты на странице, созданные в файлах javascript.
Это поможет вам с тем, что вам нужно - https://datatables.net/examples/styling/bootstrap
Спасибо, вы знаете, где находится HTML-код для панели поиска и результатов на странице?
Это добавлено самой библиотекой, вам просто нужно инициализировать datatable в вашей таблице содержимого, как показано - $ ('# your_table_id'). DataTable ();
Измените действие поиска, как это
public function search($id, Request $request)
{
$name = $request->get('participant');
$conference = Conference::with(['registrations.participants' => function() ($query) use ($name){
return $query->where('name', 'like', '%' . $name . '%');
},'registrations.participants.answers.question'])->findOrFail($id);
return view('participants.index', compact('conference'));
}
Теперь, если вы внимательно посмотрите, и индекс, и поиск имеют один и тот же тип возврата conference, разница только в том, что в поиске мы отфильтровали участников.
ИЛИ ЖЕ
вы также можете просто добавить функцию поиска в действие индекс
public function index($id, Request $request){
$name = $request->get('participant');
if ($name){
$conference = Conference::with(['registrations.participants' => function() ($query) use ($name){
return $query->where('name', 'like', '%' . $name . '%');
},'registrations.participants.answers.question'])->findOrFail($id);
}else{
$conference = Conference::with('registrations.participants.answers.question')->findOrFail($id);
}
return view('participants.index')->with('conference', $conference);
}
Спасибо, а как показать отфильтрованных участников в представлении? Обязательно ли иметь один и тот же foreach дважды? А также результаты отфильтрованных участников должны появляться только при нажатии кнопки «Поиск».
когда вы нажимаете кнопку отправки, он отображает тот же вид, но с отфильтрованным результатом
используйте таблицы данных jquery для отображения списка. он автоматически позаботится о поиске, разбиении на страницы и т. д.