tetero
@tetero (tetero)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

laravelで作ったカレンダーのその日がデータを持っていたら文字色を変える処理を書きたい

やりたいこと

laravelで作ったカレンダーのその日がデータを持っていたら文字色を変える処理を書きたい
・ カレンダーの日付をクリックすると予約フォームから送られてきたデータが入っている

発生している問題

・その日をaタグで囲っている
・データを\App\Models\Reservationから取得できない
・  \App\Models\Reservation::where("calendar", 2021-03-25)->get();の第2引数を$ym. '-0'. $dayにしてもできない
・色々試しているのでコード乱れていてすみません。普通にカレンダーとして作動はできています。

if($today == $date){

                $ym1 = "{{ $ym}} ";
                if($day < 10){
                    $todayReservations = \App\Models\Reservation::where("calendar", 2021-03-25)->get();
                    dd($todayReservations);


下記のコードのこの辺り

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\ReservationController;
use Illuminate\Support\Facades\Auth; 

class CalendarController extends Controller
{
    public function loginPage(){
        return view('loginPage');
    }
//カレンダーの日付をクリックしてその日の予約状況を表示するメソッド
    public function detailshow($today){
        $reservation = \App\Models\Reservation::all();
        $calendar = $reservation->pluck('calendar');
        $todayReservations = \App\Models\Reservation::where("calendar",$today)->get();
        return view('dayDetail',compact('reservation','today','calendar','todayReservations'));
        }

//予約状況の名前をクリックしてそのユーザーの予約内容を表示する
    public function showCustomer($id){
        $customerDetail = \App\Models\Reservation::find($id);//ここでidを受け取って個人個人に振り分けてる
        // dd($customerDetail->name);
        return view('customer',compact('customerDetail'));
    }

//カレンダーを表示されるメソッド
    public function dayShow(Request $req){
        //タイムゾーンの設定
        date_default_timezone_set('Asia/Tokyo');

        //前月・翌月ボタンが押された場合、GETパラメータから年月を取得
        if(isset($_GET['ym'])){
            $ym = $_GET['ym'];
        } else {
        //押されてなかったら今の年月を取得 (2019-07)
            $ym = date('Y-m');
        }
        // dd($ym);→2021-03
        //タイムスタンプを作成する
        $timestamp = strtotime($ym . '-01'); //2019-07に"-01"を足している
        if($timestamp == false){
            $ym = date('Y-m');
            $timestamp = strtotime($ym . '-01');
        }
        //↑これで$timestampは2019-07-01となる
        // dd($timestamp);→1614524400

        //今日の日付をセット (2019-07-13)
        $today = date('Y-m-j');
        // dd($today);→2021-03-8

        //カレンダーのタイトルを設定 (2019年7月)
        $title = date('Y年m月' , $timestamp);
        // dd($title);→2021年03月

        //前月・次月の年月を取得する
        $prev = date('Y-m',strtotime('-1 month',$timestamp)); //2019-06
        $next = date('Y-m',strtotime('+1 month',$timestamp)); //2019-08
        // dd($prev);→2021-02


        //該当の月の日数を取得 (31を取得)
        $day_count = date('t',$timestamp);
        // dd($day_count);→31

        //曜日を取得 (1:月曜日を取得)
        $youbi = date('w',$timestamp);
        // dd($youbi);→1

        //カレンダー作成の準備
        $week = '';
        $weeks = [];

        //月初の曜日より前の曜日を空セルにする
        $week .= str_repeat('<td></td>' , $youbi);
        // dd($week);→<td></td>

        $reservation = \App\Models\Reservation::all();
        $calendars = $reservation->pluck('calendar');
        // $todayReservations1 = \App\Models\Reservation::where("calendar","2021-03-25")->count();
                // dd($todayReservations1);


        $color = "green";


        for($day = 1; $day <= $day_count; $day++,$youbi++){
            $date = $ym . '-' . $day; //日にちを1日ずつ足していく

            // dd($day);→1
            //もし今日の日付だったらクラスをつける
            if($today == $date){
                $todayReservations1 = \App\Models\Reservation::where("calendar",$ym . '-' . $day)->count();
                $todayReservations2 = \App\Models\Reservation::where("calendar",$ym . '-0' . $day)->count();
                dd($todayReservations2);
                echo $todayReservations1;
                // $todayReservations1 = \App\Models\Reservation::where("calendar",$today)->count();
                // $todayReservations2 = \App\Models\Reservation::where("calendar","2021-3-25")->count();

                // $ym1 = "{{ $ym}} ";

                if($day < 10){
                    // $reservation = \App\Models\Reservation::all();
                    // $calendars = $reservation->pluck('calendar');
                    // $todayReservations1 = \App\Models\Reservation::where("calendar",$date)->count();
                    // dd($todayReservations1);

                    // 二次元配列 オブジェクトのインスタンス レコードごと撮ってくるforeach 文字列型なら変える必要がある
                    if( $todayReservations1 < 1){
                        echo 'これは'.$color.'です①';

                        }else{
                            echo "不合格";

                        }

                        $week .= '<td class="today">'.'<a href="dayDetail/' .$ym. '-0'. $day.'">' . $day.'</a>';
                    }else {
                        if( $todayReservations1 < 1){
                            echo 'これは'.$color.'です②';

                            }else{
                                echo "不合格";

                            }

                    // dd($todayReservations1);
                    // foreach($calendars as $calendar){
                    //     if($calendar == $ym. '-'. $day){
                    //     }
                    // }
                    $week .= '<td class="today">'.'<a href="dayDetail/' .$ym. '-'. $day.'">' . $day.'</a>';
                }

            } else{
                //今日以外の日付は普通に出力する
                // $todayReservations1 = \App\Models\Reservation::where("calendar",$date)->get();
                // $todayReservations2 = \App\Models\Reservation::where("calendar",$date2)->get();
                // dd($todayReservations1);

                if($day < 10){
                    if( $todayReservations2 < 1){
                        echo 'これは'.$color.'です③';

                        }else{
                            echo "不合格";

                        }

                    // foreach($calendars as $calendar){
                    //     if($calendar == $ym. '-0'. $day){
                    //         $color = "green";
                    //     }
                    // }
                    $week .= '<td class="dayNumber">'. '<a href="dayDetail/' .$ym.'-0'. $day.'">'. $day.'</a>';
                }else {
                    if( $todayReservations1 < 1){
                        echo 'これは'.$color.'です④';

                        }else{
                            echo "不合格";

                        }

                    // dd($todayReservations);

                    // foreach($calendars as $calendar){
                    //     if($calendar == $ym. '-'. $day){
                    //         $color = "green";
                    //     }
                    // }
                    $week .= '<td class="today">'.'<a href="dayDetail/' .$ym. '-'. $day.'">' . $day.'</a>';
                     }
            }
        $week .= '</td>';

        //週終わり・月終わりの処理(もし今日の日付が月の日数の最後の日付だったら)
        if ($youbi % 7 == 6 || $day == $day_count) {
            if ($day == $day_count) {
                $week .= str_repeat('<td></td>', 6 - ($youbi % 7));
            }

            //$weeks(配列)の中に一週間分格納する
            $weeks[]='<tr>' . $week . '</tr>';
            $week = '';
        }
    }
        return view('calendar',compact('prev','title','next','weeks','day','color','todayReservations1'));
    }
    //顧客を削除するメソッド
    function destroy($id)
    {
    $reservation = \App\Models\Reservation::find($id);
    $reservation->delete();
    return redirect("/dayDetail/{$reservation->calendar}");
    }

}

参考サイト

【Level3】PHP勉強:カレンダーの作成

具体的な正解コードが分かる方、
よろしくお願い致します!

0

1Answer

$todayReservations = \App\Models\Reservation::where("calendar", 2021-03-25)->get();

の部分ですが

$num = \App\Models\Reservation::where("calendar", '=', '2021-03-25')->count();
$color = $num>0?'hotpink':'white';

$color を html のstyle のどこかに入れる。

で、対応できないかな。

0Like

Comments

  1. @tetero

    Questioner

    ありがとうございます!

    count()いい感じで使えそうです!
    今朝は時間がない中でバタバタして投稿して、説明不足でした。

    $todayReservations1 = \App\Models\Reservation::where("calendar",$ym . '-' . $day)->count();

    このように第2引数は変数にしたいです。
    カレンダーに予約が入っている日だけを緑色のcolorにしたいです。

    count()を使って、
    もしその日にデータが0件だったら普通のcolor
    それ以外はgreenにする

    というような処理をしたいです。


    しかし、
    $ym . '-' . $day
    を使うとうまくデータがとれません。

    なにかお気づきになることなどありますでしょうか?
  2. テーブルの構造が分からないので憶測ですが、
    reservation.calendar
    カラムに日付型の値が入っているとして、

    $targetDateString = $ym . '-' . $day;
    $todayReservations1 = \App\Models\Reservation::where("calendar",'=', $targetDateString)->count();

    で、ご希望の挙動になると思います。
    $ym . '-' . $dayがSQLのWHERE区に指定してエラーにならないフォーマットになっている必要があります。'2020/01/01'の様な。

    エラーが出ていればエラーメッセージなどの情報があるともう少し詳しいアドバイスができると思います。

Your answer might help someone💌