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

avatar Supriono
@Supriono

84 Kontribusi 16 Poin

Diperbarui 5 tahun yang lalu

Tanggapan

silahkan ditulis jawabannya kalau sudah solved, dan ditandai sebagai jawaban yang benar

3 Jawaban:

Contoh penggunaan whereyear

<pre> $users = DB::table('users') -&gt;whereYear('created_at', '2016') -&gt;get(); </pre>

avatar hilmanski
@hilmanski

2670 Kontribusi 2132 Poin

Dipost 5 tahun yang lalu

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-&gt;handleViewException(object(ErrorException), 1)in PhpEngine.php line 44 at PhpEngine-&gt;evaluatePath('C:\xampp\htdocs\sobat-desa\storage\framework\views/47d5ea76b62a9909e5b449b3523a420c90f43aab.php', array('__env' =&gt; object(Factory), 'app' =&gt; object(Application), 'errors' =&gt; object(ViewErrorBag), 'inboxs' =&gt; null))in CompilerEngine.php line 59 at CompilerEngine-&gt;get('C:\xampp\htdocs\sobat-desa\resources\views/arsip/view.blade.php', array('__env' =&gt; object(Factory), 'app' =&gt; object(Application), 'errors' =&gt; object(ViewErrorBag), 'inboxs' =&gt; 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-&gt;whereYear('created_at',Request::get('year')); } if(Request::get('month')){ $inboxs-&gt;whereYear('created_at',Request::get('month')); } $inboxs = $inboxs-&gt;paginate(10);

    return view(&#039;arsip.filter&#039;)-&amp;gt;with(compact(&#039;inboxs&#039;));
}

</pre>

Route nya ini

<pre>

Route::get('/arsip/inbox/filter', 'ArsipController@inboxFilter')-&gt;name('inbox.filter'); </pre>

dan di inbox.blade.php nya seperti ini

<pre> &lt;form action="{{ route('inbox.filter') }}" method="GET" class="form-group"&gt; {{ csrf_field() }} &lt;select style="cursor:pointer;" class="form-control" id="tag_select" name="year"&gt; &lt;option value="0" selected disabled&gt; Pilih Tahun&lt;/option&gt; &lt;?php $year = date('Y'); $min = $year - 60; $max = $year; for( $i=$max; $i&gt;=$min; $i-- ) { echo '&lt;option value='.$i.'&gt;'.$i.'&lt;/option&gt;'; } ?&gt; &lt;/select&gt; &lt;select style="cursor:pointer;margin-top:1.5em;margin-bottom:1.5em;" class="form-control" id="tag_select" name="month"&gt; &lt;option value="0" selected disabled&gt; Pilih Bulan&lt;/option&gt; &lt;option value="01"&gt; Januari&lt;/option&gt; &lt;option value="02"&gt; Februari&lt;/option&gt; &lt;option value="03"&gt; Maret&lt;/option&gt; &lt;option value="04"&gt; April&lt;/option&gt; &lt;option value="05"&gt; Mei&lt;/option&gt; &lt;option value="06"&gt; Juni&lt;/option&gt; &lt;option value="07"&gt; Juli&lt;/option&gt; &lt;option value="08"&gt; Agustus&lt;/option&gt; &lt;option value="09"&gt; September&lt;/option&gt; &lt;option value="10"&gt; Oktober&lt;/option&gt; &lt;option value="11"&gt; November&lt;/option&gt; &lt;option value="12"&gt; Desember&lt;/option&gt; &lt;/select&gt;

&amp;lt;input class=&quot;btn btn-default btn-block&quot; name=&quot;submit&quot; type=&quot;submit&quot; value=&quot;Cari Data Arsip&quot;/&amp;gt;

&lt;/form&gt; </pre>

ini di filter.blade.php

<pre> &lt;ul id="myUL"&gt; @foreach ($inboxs as $data) &lt;li&gt;&lt;a href="{{ route('inbox.view', $data-&gt;id) }}"&gt;&lt;span style="color:#737373;padding-right:1em;" class="glyphicon glyphicon-folder-open"&gt;&lt;/span&gt; {{ $data-&gt;perihal }} &lt;span class="from"&gt;dari&lt;/span&gt; {{ $data-&gt;pengirim }}&lt;/a&gt;&lt;/li&gt; @endforeach &lt;/ul&gt; </pre>

mohon di bantu

avatar Supriono
@Supriono

84 Kontribusi 16 Poin

Dipost 5 tahun yang lalu

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')-&gt;name('inbox.filter'); </pre>

Controller..

<pre> public function inboxFilter(Request $request){ $month = $request-&gt;get('month'); $year = $request-&gt;get('year');

$inboxs = Inbox::whereYear(&#039;created_at&#039;, &#039;=&#039;, $year)
          -&amp;gt;whereMonth(&#039;created_at&#039;, &#039;=&#039;, $month)
          -&amp;gt;get();
    
    
    return view(&#039;arsip.inbox&#039;, [&#039;inboxs&#039; =&amp;gt; $inboxs]);
}

</pre>

View..

<pre> &lt;form action="{{ route('inbox.filter') }}" method="GET" class="form-group" id="formFilter"&gt; {{ csrf_field() }} &lt;select style="cursor:pointer;" class="form-control" id="tag_select" name="year"&gt; &lt;option value="0" selected disabled&gt; Pilih Tahun&lt;/option&gt; &lt;?php $year = date('Y'); $min = $year - 60; $max = $year; for( $i=$max; $i&gt;=$min; $i-- ) { echo '&lt;option value='.$i.'&gt;'.$i.'&lt;/option&gt;'; }&gt; &lt;/select&gt; &lt;select style="cursor:pointer;margin-top:1.5em;margin-bottom:1.5em;" class="form-control" id="tag_select" name="month"&gt; &lt;option value="0" selected disabled&gt; Pilih Bulan&lt;/option&gt; &lt;option value="01"&gt; Januari&lt;/option&gt; &lt;option value="02"&gt; Februari&lt;/option&gt; &lt;option value="03"&gt; Maret&lt;/option&gt; &lt;option value="04"&gt; April&lt;/option&gt; &lt;option value="05"&gt; Mei&lt;/option&gt; &lt;option value="06"&gt; Juni&lt;/option&gt; &lt;option value="07"&gt; Juli&lt;/option&gt; &lt;option value="08"&gt; Agustus&lt;/option&gt; &lt;option value="09"&gt; September&lt;/option&gt; &lt;option value="10"&gt; Oktober&lt;/option&gt; &lt;option value="11"&gt; November&lt;/option&gt; &lt;option value="12"&gt; Desember&lt;/option&gt; &lt;/select&gt; &lt;/form&gt; &lt;button class="btn btn-default btn-block" type="submit" form="formFilter" value="Submit"&gt;Cari Data&lt;/button&gt; </pre>

avatar Supriono
@Supriono

84 Kontribusi 16 Poin

Dipost 5 tahun yang lalu

Login untuk ikut Jawaban