Postingan lainnya
Cara membuat filter data berdasarkan bulan dan tahun pada laravel
Halo semua, minta bantuan lagi nih. Saya mau menampilkan data yang di filter berdasarkan bulan dan tahun yang telah di tentukan melalui form select option pada project laravel saya. Untuk Penulisan di controllernya bagaimana yah.. berikut kode saya..
Di View.Blade.php
<form action="{{ route('inbox.filter') }}" method="GET" class="form-group">
{{ csrf_field() }}
<select style="cursor:pointer;" class="form-control" id="tag_select" name="year">
<option value="0" selected> Pilih Tahun</option>
<?php
$year = date('Y');
$min = $year - 60;
$max = $year;
for( $i=$max; $i>=$min; $i-- ) {
echo '<option value='.$i.'>'.$i.'</option>';
}?>
</select>
<select style="cursor:pointer;margin-top:1.5em;margin-bottom:1.5em;" class="form-control" id="tag_select" name="month">
<option value="0" selected> Pilih Bulan</option>
<?php for( $m=1; $m<=12; ++$m ) {
$month_label = date('F', mktime(0, 0, 0, $m, 1));
?>
<option value="<?php echo $month_label; ?>"><?php echo $month_label; ?></option>
<?php } ?>
</select>
<input class="btn btn-default btn-block" name="submit" type="submit" value="Cari Data Arsip"/>
</form>
Route nya seperti ini
Route::get('/arsip/inbox/filter','ArsipController@inboxFilter')->name('inbox.filter');
Nah di Controllernya ini yang bagaimana.. :D
public function inboxFilter($year, $month)
{
$year = Inbox::whereYear($year);
$month = Inbox::whereMonth($month);
return view('arsip.filter', compact('month', 'year'));
}
note: Laravel 5.4
Tanggapan
silahkan ditulis jawabannya kalau sudah solved, dan ditandai sebagai jawaban yang benar
3 Jawaban:
Contoh penggunaan whereyear
<pre> $users = DB::table('users') ->whereYear('created_at', '2016') ->get(); </pre>
penerapannya gimana yah mas untuk masalah saya di atas.. sudah saya coba tapi masih error.. setelah select tahun dan bulan pada view.blade kemudian klik submit.. itu menghasilkan route seperti ini :
<pre> http://localhost:8000/arsip/inbo /filter?_token=hXxD0DsBOOLrcO7KKaulzlE7hEVjemi897NAAtYs&year=2019&month=January&submit=Cari+Data+Arsip </pre>
Dan menampilkan errorException..
<pre> 2/2) ErrorException
Invalid argument supplied for foreach() (View: C:\xampp\htdocs\sobat-desa\resources\views\Arsip\view.blade.php) in 47d5ea76b62a9909e5b449b3523a420c90f43aab.php line 35 at CompilerEngine->handleViewException(object(ErrorException), 1)in PhpEngine.php line 44 at PhpEngine->evaluatePath('C:\xampp\htdocs\sobat-desa\storage\framework\views/47d5ea76b62a9909e5b449b3523a420c90f43aab.php', array('__env' => object(Factory), 'app' => object(Application), 'errors' => object(ViewErrorBag), 'inboxs' => null))in CompilerEngine.php line 59 at CompilerEngine->get('C:\xampp\htdocs\sobat-desa\resources\views/arsip/view.blade.php', array('__env' => object(Factory), 'app' => object(Application), 'errors' => object(ViewErrorBag), 'inboxs' => null))in View.php line 137 </pre>
Controller saya seperti ini
<pre> public function inboxFilter() { $inboxs = Inbox::orderBy('id','desc'); if(Request::get('year')){ $inboxs->whereYear('created_at',Request::get('year')); } if(Request::get('month')){ $inboxs->whereYear('created_at',Request::get('month')); } $inboxs = $inboxs->paginate(10);
return view('arsip.filter')-&gt;with(compact('inboxs'));
}
</pre>
Route nya ini
<pre>
Route::get('/arsip/inbox/filter', 'ArsipController@inboxFilter')->name('inbox.filter'); </pre>
dan di inbox.blade.php nya seperti ini
<pre> <form action="{{ route('inbox.filter') }}" method="GET" class="form-group"> {{ csrf_field() }} <select style="cursor:pointer;" class="form-control" id="tag_select" name="year"> <option value="0" selected disabled> Pilih Tahun</option> <?php $year = date('Y'); $min = $year - 60; $max = $year; for( $i=$max; $i>=$min; $i-- ) { echo '<option value='.$i.'>'.$i.'</option>'; } ?> </select> <select style="cursor:pointer;margin-top:1.5em;margin-bottom:1.5em;" class="form-control" id="tag_select" name="month"> <option value="0" selected disabled> Pilih Bulan</option> <option value="01"> Januari</option> <option value="02"> Februari</option> <option value="03"> Maret</option> <option value="04"> April</option> <option value="05"> Mei</option> <option value="06"> Juni</option> <option value="07"> Juli</option> <option value="08"> Agustus</option> <option value="09"> September</option> <option value="10"> Oktober</option> <option value="11"> November</option> <option value="12"> Desember</option> </select>
&lt;input class="btn btn-default btn-block" name="submit" type="submit" value="Cari Data Arsip"/&gt;
</form> </pre>
ini di filter.blade.php
<pre> <ul id="myUL"> @foreach ($inboxs as $data) <li><a href="{{ route('inbox.view', $data->id) }}"><span style="color:#737373;padding-right:1em;" class="glyphicon glyphicon-folder-open"></span> {{ $data->perihal }} <span class="from">dari</span> {{ $data->pengirim }}</a></li> @endforeach </ul> </pre>
mohon di bantu
Tanggapan
biasakan menampikan kode yang kamu buat dan error yang jelas biar bisa dipelajar sama temanteman yang lain, btw tanggapan tulis di "tanggapan/komentar" jawaban khusus untuk menjawab
sudah di edit mas
coba samakan dengan jawaban yang pertama cara penulisannya, ganti nama table, test dulu versi simplenya
sudah mas, sekarang keterangan errornya malah ada di view.blade.php padahal di controller itu di return view ke filter.blade.php
silahkan ditulis jawabannya kalau sudah solved, dan ditandai sebagai jawaban yang benar
ROUTE..
<pre> Route::get('/arsip/filter_inbox', 'ArsipController@inboxFilter')->name('inbox.filter'); </pre>
Controller..
<pre> public function inboxFilter(Request $request){ $month = $request->get('month'); $year = $request->get('year');
$inboxs = Inbox::whereYear('created_at', '=', $year)
-&gt;whereMonth('created_at', '=', $month)
-&gt;get();
return view('arsip.inbox', ['inboxs' =&gt; $inboxs]);
}
</pre>
View..
<pre> <form action="{{ route('inbox.filter') }}" method="GET" class="form-group" id="formFilter"> {{ csrf_field() }} <select style="cursor:pointer;" class="form-control" id="tag_select" name="year"> <option value="0" selected disabled> Pilih Tahun</option> <?php $year = date('Y'); $min = $year - 60; $max = $year; for( $i=$max; $i>=$min; $i-- ) { echo '<option value='.$i.'>'.$i.'</option>'; }> </select> <select style="cursor:pointer;margin-top:1.5em;margin-bottom:1.5em;" class="form-control" id="tag_select" name="month"> <option value="0" selected disabled> Pilih Bulan</option> <option value="01"> Januari</option> <option value="02"> Februari</option> <option value="03"> Maret</option> <option value="04"> April</option> <option value="05"> Mei</option> <option value="06"> Juni</option> <option value="07"> Juli</option> <option value="08"> Agustus</option> <option value="09"> September</option> <option value="10"> Oktober</option> <option value="11"> November</option> <option value="12"> Desember</option> </select> </form> <button class="btn btn-default btn-block" type="submit" form="formFilter" value="Submit">Cari Data</button> </pre>