前提・実現したいこと
PHP(Laravel6)で健康管理をするためのwebアプリを作っています。
healthsテーブルにdate型の日付カラムをもたせており、ユーザーが登録した日付と同じシステム日付がビューにあった時に、該当のレコードを表示し、なければシステム日付のみを表示するといった機能を実装しているところです。
発生している問題・エラーメッセージ
そこでarray_filter関数を用いて、healthsからループでまわっている日のデータをフィルターにかけ、同じデータが存在する場合は該当のレコードを表示、なければシステム日付のみを表示という条件分岐を作っている際に、以下のようなエラーがでました。
ErrorException array_filter() expects parameter 1 to be array, object given (View: /var/www/health-manage-app/resources/views/health/index.blade.php)
該当のソースコード
実際のソースコードは以下になります。
index
1@php 2 $day = 1; 3@endphp 4 5@while ($day <= 31) 6 @php 7 $simple_date = strtotime(sprintf("%04d-%02d-%02d", $year, $month, $day)); 8 @endphp 9 10 @if($month != date("n", $simple_date)) 11 @break; 12 @else 13 @php 14 $ymd = date("Y-m-d", $simple_date); 15 @endphp 16 @endif 17 18 @php 19 $same_date = array_filter($healths, function($health){ 20 return $health['date'] == $ymd; 21 }); 22 @endphp 23 24 @if(isset($same_date)) 25 26 <tr> 27 <td>{{ $health->date }}</td> <td>{{ $health->temperature_mo }}</td> <td>{{ $health->temperature_ev }}</td> <td>{{ $health->cough }}</td> <td>{{ $health->dyspnea }}</td> <td>{{ $health->nasal }}</td> <td>{{ $health->throat }}</td> <td>{{ $health->headache }}</td> <td>{{ $health->diarrhea }}</td> <td>{{ $health->taste }}</td> <td>{{ $health->smell }}</td> <td class="text-ellipsis">{{ $health->other }}</td> <td><a href='/health/{{ $health->id }}'>詳細</a></td> <td></td> <td><a href='/health/action'>登録</a></td> 28 </tr> 29 30 31 @else 32 <tr> 33 <td>{{ $ymd }}</td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td></td> <td class="text-ellipsis"></td> <td><a href= '{{ route('health.create') }}'>登録</a></td> <td></td> <td><a href='/health/action'>登録</a></td> 34 </tr> 35 @endif 36 37 @php 38 $day++; 39 @endphp 40@endwhile
HealthController
1public function index(Request $request) 2 { 3 if($request->has('year') && !empty($request->year)){ 4 $year = $request->year; 5 }else{ 6 $date = date("Y-m-d"); 7 $year = date('Y', strtotime($date)); 8 } 9 10 if($request->has('month') && !empty($request->month)){ 11 $month = $request->month; 12 }else{ 13 $date = date("Y-m-d"); 14 $month = date('n', strtotime($date)); 15 } 16 17 if($request->has('day') && !empty($request->day)){ 18 $day = $request->day; 19 }else{ 20 $date = date("Y-m-d"); 21 $day = date('t', strtotime($date)); 22 } 23 24 if($request->has('uid') && !empty($request->uid)){ 25 $uid = $request->uid; 26 }else{ 27 $uid = Auth::user()->id; 28 } 29 30 $name = Auth::user()->name; 31 32 $healths = Auth::user()->healths()->get(); 33 34 return view('health/index', compact('uid','name','year','month','day','healths')); 35 } 36
試したこと
https://www.suzu6.net/posts/162-php-array_filter/#%E9%96%BE%E5%80%A4
上記の記事と同じ構造であると判断し、今回のarray_filter関数のコードを書きました。
エラーの内容として、ひとつ目のパラメータには配列を入れないといけませんよ、という意味と認識しましたが、コントローラにて$healthsを定義してviewに渡しているため、既に連想配列になっているはず(echoで$healthsを出力すると所持データを連想配列で表示できることは確認済み)と考えています。
PHP初学者のため、至らない質問になってしまっているかと思いますが、わかる方いらっしゃいましたらご教示いただけると幸いです。
よろしくお願いいたします。
補足情報(FW/ツールのバージョンなど)
PHP7.2 Laravel6
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/24 02:01