Reputation: 149
I want to make searching on table users but have got error in view on http://127.0.0.1:8000/
:
Invalid argument supplied for foreach() (View: /opt/lampp/htdocs/abonamenty/resources/views/users/index.blade.php)
And on the localhost error 404 after click search button.
"Object not found! The requested URL was not found on this server. The link on the referring page appears to be incorrect or outdated. Tell the author of this page about the problem. If you think this is a server error, contact your administrator."
This is part of my controller
public function index(Request $request)
{
$data = User::sortable()->paginate(5);
return view('users.index', compact('data'))->with('i', ($request->input('page', 1) - 1) * 5);
}
public function search(Request $request)
{
$search = $request->get('search');
$data = DB::table('users')->where('surname', "%$search%")->paginate(5);
return view('users.index', ['users' => $data]);
}
My routes:
Route::get('/home', 'HomeController@index')->name('home');
Route::group(['middleware' => ['auth']], function () {
Route::resource('roles', 'RoleController');
Route::resource('users', 'UserController');
Route::resource('permissions', 'PermissionController');
Route::resource('products', 'ProductController');
Route::get('/search', 'UserController@search');
Route::get('data', 'UserController@index');
Route::get('posts', 'PostController@index');
});
My view:
@extends('layouts.app')
@section('content')
<div class="row">
<div class="col-lg-12 margin-tb">
<div class="pull-left">
<h2>Zarządzanie kontami użytkowników</h2>
</div>
<div class="col-md-4">
<form action="/search" method="get">
<div class="input-group">
<input type="search" name="search" class="form-control">
<span class="input-group-prepend">
<button type="submit" class="btn btn-primary">Wyszukaj</button>
</span>
</div>
</form>
</div>
<div class="pull-right">
<a class="btn btn-success" href="{{ route('users.create') }}"> Utwórz nowego użytkownika</a>
</div>
</div>
</div>
<br>
@if ($message = Session::get('success'))
<div class="alert alert-success">
<p>{{ $message }}</p>
</div>
@endif
<table class="table table-bordered">
<tr>
<th scope="col">@sortablelink('id', 'Numer')</th>
<th scope="col">@sortablelink('name', 'Imię')</th>
<th scope="col">@sortablelink('surname', 'Nazwisko')</th>
<th scope="col">@sortablelink('showname', 'Nazwa wyświetlania')</th>
<th scope="col">@sortablelink('email', 'Email')</th>
<th>Rola</a></th>
<th width="280px">Akcja</a></th>
</tr>
@foreach ($data ?? '' as $key => $user)
<tr>
<td>{{ ++$i ?? '' ?? '' }}</td>
<td>{{ $user->name }}</td>
<td>{{ $user->surname }}</td>
<td>{{ $user->showname }}</td>
<td>{{ $user->email }}</td>
<td>
@if(!empty($user->getRoleNames()))
@foreach($user->getRoleNames() as $v)
<label class="badge badge-success">{{ $v }}</label>
@endforeach
@endif
</td>
<td>
<a class="btn btn-info" href="{{ route('users.show',$user->id) }}">Wiecej informacji</a>
<a class="btn btn-primary" href="{{ route('users.edit',$user->id) }}">Edytuj użytkownika</a>
{!! Form::open(['method' => 'DELETE','route' => ['users.destroy', $user->id],'style'=>'display:inline']) !!}
{!! Form::submit('Usuń', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}
</td>
</tr>
@endforeach
</table>
{!! $data ?? ''->appends(request()->except('page'))->render() !!}
<!--{!! $data ?? ''->render() !!}-->
<p class="text-center text-primary"><small>ARTplus 2020</small></p>
@endsection
Upvotes: 1
Views: 734
Reputation: 101
I think you need to change the search method
use Illuminate\Support\Facades\Input;
public function search()
{
$search =Input::get('search');
$data = DB::table('users')->where('surname', "%$search%")->paginate(5);
// Also we can check using print_r($data); die();
return view('users.index', ['users' => $data]);
}
Upvotes: 1