【Laravel】月ごとにデータをフィルタさせる

前回までの状況はこちら。

最新ソースはこちら。

https://github.com/takishita2nd/hotel-mng

一通りデータの登録はできましたが、このままデータが増えると1画面に大量のデータが表示されることになります。

なので、一覧のデータを月毎にフィルタ表示させたいと思います。

まず、Viewを修正。

年月を指定できるようにします。

                    {!! Form::open(['url' => action('RegisterManagementController@indexToMonthly')]) !!}
                    <table>
                        <tr>
                            <td>{!! Form::selectYear('year', 2019, 2020) !!}年</td>
                            <td>{!! Form::selectMonth('month') !!}</td>
                            <td>{!! Form::submit('表示') !!}</td>
                        </tr>
                    </table>
                    {!! Form::close() !!}

本来は、Vue.jsなどを使ってフロントエンド側でうまくできるのが理想なのですが、今からVueの実装を行うのは面倒くさいので、フィルタ情報を一旦POSTで受け取り、GET+クエリパラメータの形にして、リダイレクトさせるという方法をとります。

ルートの設定。

Route::post('/management/indexToMonthly', 'RegisterManagementController@indexToMonthly');

コントローラ。まずはGETの方。

    /**
     * Show the Register.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        if(is_null($request->input('year')) || is_null($request->input('month')))
        {
            return view('register.index', ['registerLists' => $this->registerManagement->getList()]);
        }
        else
        {
            return view('register.index', ['registerLists' => $this->registerManagement->getListByMonth($request->input('year'), $request->input('month'))]);
        }
    }

GETリクエストでも引数にRequest $requestを書き足せば、クエリパラメータを取得できます。

忘れてはいけないのは、クエリパラメータがNULLだった場合。

is_null()でNULLチェックを行い、デフォルト(パラメータがない場合)の画面表示をさせるようにしましょう。

次は、POST側の処理。

    /**
     * indexの月別表示
     *
     * @return \Illuminate\Http\Response
     */
    public function indexToMonthly(Request $request)
    {
        return redirect('management?year='.$request->year.'&month='.$request->month);
    }

クエリパラメータ付きURLを作成し、リダイレクトを行っています。

これしか方法が思い浮かばなかった。

次はリポジトリ。

    /**
     * 月別予約一覧を取得する
     * 
     * @return ReserveManagement[]
     */
    public function getListByMonth($year, $month)
    {
        return ReserveManagement::where('start_day', '>=', date('Y-m-d', strtotime('first day of '.$year.'-'.$month)))
                                ->where('start_day', '<=', date('Y-m-d', strtotime('last day of '.$year.'-'.$month)))
                                ->get();
    }

whereを2つ付けることでAND条件になります。

クエリビルダー便利。

同じやり方をスケジュール一覧にも行います。

十分とは言えませんが、やりたいことはできました。

たぶん次でラスト。

月毎に売上を集計して表示させます。

バナークリックで応援よろしくおねがいします。

【完全栄養食】BASE NOODLEのボロネーゼソース

BASE NOODLEの箱を調べたら、こんな物が見つかりましたので、

いや、最初に確認しろよ。

きっと、お試しでおまけしておくから、気に入ったら買っておくれ、と言うことなのでしょう。

本日は完全栄養食の日(勝手に設定)なので、使ってみました。

きっと、BASE NOODLE用に合わせた味付けなのだろう。

見た目はトマトソース。

匂いもトマトソース。

味もトマトソース。

美味しく頂きました。

うん、市販のパスタソースで十分かな。

バナークリックで応援よろしくお願いします。

Xiaomiが日本進出、端末はMi Note10か?スペックを確認してみた。

中国のスマホメーカーXiaomiが日本進出を発表しました。

提供する端末は公開された写真からMi Note10ではないか、という予想がされています。

なぜなら、Xiaomiの3レンズカメラはこの機種だけだから。

ということで、スペックを見てみました。

これはすでにリリースされているグローバル版のスペックです。日本向けにカスタマイズされる可能性は十分あります。

CPUはミドルレンジのSnapdragon730G。

CPUはミドルレンジですが、メモリとストレージはハイエンド並み6GB/128GBですね。

指紋認証が前面パネルの中に内蔵されているようです。

大容量バッテリーを搭載しています。

防水・防塵ではありません。(だから安いのか)

珍しく赤外線を搭載しています。これで家電を操作できるみたいです。

グローバル版はおサイフケータイ搭載していませんが、日本向けにカスタマイズされるかもしれません。

ネットではすでにグローバル版をネットで購入しレビューを行っているので、参考にしてみてはいかがでしょうか?

バナークリックで応援よろしくお願いします。

【食材を知ろう】牛肉を食べるメリット・デメリット

食材を知れば、ダイエット中でも安心して食べることができます。

ここでは牛肉についてまとめてみました。

体を作るタンパク源

タンパク質は筋肉の元。筋トレと合わせれば基礎代謝がアップし、痩せやすくなります。

疲労に負けない体になる

牛肉に含まれている鉄分や亜鉛は血液を作る元となり、酸素を全身に送ってくれます。結果敵に疲れにくい体になります。

代謝を良くする

牛肉に含まれているビタミンB2は細胞の再生を活性化させ、エネルギーの消費を促進させます。結果敵にダイエットに繋がったり、美容効果もあります。

食べ過ぎに注意

牛肉の食べ過ぎは、脂質の取り過ぎとなり、血中コレステロールを増加させたり、中性脂肪をの数値を挙げることになります。

一日100g程度が理想とされています。食べ過ぎに注意しましょう。

バナークリックで応援よろしくお願いします。

【Laravel】スケジュールの重複をチェックする

前回まで状況はこちら。

最新ソースコードはこちら。

https://github.com/takishita2nd/hotel-mng

今回は予約を入れたスケジュールに重複がないかを確認し、重複していたらエラー表示を行います。

まず、重複チェックを行う処理をリポジトリに作成します。

    /**
     * スケジュールの重複を確認する
     * 
     * @return boolean
     */
    public function checkSchedule($date, $num)
    {
        if(ReserveDayList::where(['day' => $date])->count() != 0)
        {
            return false;
        }
        for($i = 1; $i < $num; $i++)
        {
            if(ReserveDayList::where(['day' => date('Y-m-d', strtotime($date.'+'.$i.' day'))])->count() != 0)
            {
                return false;
            }
        }

        return true;
    }

予約を入れる日にち全てに対して、データがあるかを確認します。

データの有無は、おそらく、count()でレコード数を見るのが一番スマートなやりかたでしょう。

これを、コントローラーから呼びます。

    /**
     * 登録処理
     */
    public function store(ManagementRequest $request)
    {
        if($this->registerManagement->checkSchedule($request->start_day, $request->days) == false)
        {
            return redirect('management/create')
                        ->with(['error' => 'スケジュールが重複します'])
                        ->withInput();
        }
        $param = $this->registerManagement->getParam();
        $this->registerManagement->add([
            $param[0] => $request->name,
            $param[1] => $request->address,
            $param[2] => $request->phone,
            $param[3] => $request->num,
            $param[4] => $request->days,
            $param[5] => $request->start_day
        ]);
        return redirect('management');
    }

重複していたら、元の画面にリダイレクトします。

このとき、セッションにエラーメッセージも一緒に入れます。

withInput()を入れると、入力したデータもそのまま残るようになります。

次はbladeにエラーを表示するエリアを作成します。

                @if (session('error'))
                    <div class="alert alert-danger">
                        {{ session('error') }}
                    </div>
                @endif

うまくできました。

もう少しでこの課題は完成ですね。

バナークリックで応援よろしくお願いします。

ぷろたんが語るダイエットの秘訣とは?

この動画を見て、びっくりしましたね。

久しぶりのぷろたんの動画なのですが、以前より遙かに痩せているのです。

顔を見れば全然違います。

この動画の中でぷろたんが語っていた痩せるためにやったこと、というのが、

その食材を食べると、どのような効果があるのかを知ること。

例えば、我々が一般的に「これを食べれば痩せる」などの話が沢山ありますが、その食材を食べることで、どのようにして痩せるのか、というのは意外と知らないものです。

しかし、食材のことを調べればどのような栄養素を含んでいて、それを摂取することによってどのような効果があるのか、と言うのがわかります。

そういうのを徹底的に調べたらしいです。

食を知ること。

ダイエットは運動と食事と言われていますが、食の部分はこれが一番重要なのかもしれません。

よし、オイラも食の勉強をする。

調べたことをこのブログでも載せたい。

がんばります。

バナークリックで応援よろしくお願いします。

【ジビエ】鹿モモ肉のコンフィ

コンフィはオリーブオイルで低温調理した料理全般を言うみたいです。

味はちょっと薄かったです。

もっと塩を使うか、お肉を細かく切った方が良いかもしれないでです。

あと、どのように映っているか、調理中でも確認できるビデオカメラがあればいいですね。

カメラ、高いんだよなぁ・・・

バナークリックで応援よろしくお願いします。

【Laravel】バリデーション処理を追加する

前回までの状況はこちら。

最新ソースはこちら。

https://github.com/takishita2nd/hotel-mng

バリデーション処理とは、フォームで入力した値が、正しいかどうかを確認する処理です。

現在は入力された値がそのままデータベースに入るようになってしまっているので、パラメータチェック処理を入れて、エラーを返せるようにします。

今回は実装量が少ない方法で行きます。

以下のコマンドを入力。

$ php artisan make:request ManagementRequest

そうすると、App/Http/Request/ManagementRequest.phpが作成されます。

その内容を修正します。

class ManagementRequest extends FormRequest
{
    /**
     * Determine if the user is authorized to make this request.
     *
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * Get the validation rules that apply to the request.
     *
     * @return array
     */
    public function rules()
    {
        return [
            'name' => 'required|string',
            'address' => 'required|string',
            'phone' => 'required|digits:11',
            'num' => 'required|numeric|digits_between:1,2',
            'days' => 'required|numeric|digits_between:1,4',
            'start_day' => 'required|date',
        ];
    }
}

authorize()の戻り値はtrueに変えます。

falseのままだとすべて認証エラーとなります。

rules()に各パラメータの確認内容を記入します。

こちらのサイトが参考になります。

https://qiita.com/fagai/items/9904409d3703ef6f79a2

あとは、コントローラーを変更します。

use App\Http\Requests\ManagementRequest;

    /**
     * 登録処理
     */
    public function store(ManagementRequest $request)


    /**
     * 更新処理
     */
    public function update(ManagementRequest $request)

確認を行うフォームのリスエスト処理の引数の型をManagementRequestに変更します。

これで、App/Http/Request/ManagementRequest.phpの内容が適用されます。

あとは、bladeにエラーを表示する領域を追加すればOK。

                @if ($errors->any())
                    <div class="alert alert-danger">
                        <ul>
                            @foreach ($errors->all() as $error)
                                <li>{{ $error }}</li>
                            @endforeach
                        </ul>
                    </div>
                @endif

クリックで応援よろしくお願いします。

2画面スマホLG G8X Thinqってどうなの?スペックを比較してみた!

LG G8X ThinQはLGからリリース予定の2画面スマホです。

キャリアはソフトバンクのみ。

通常は1画面ですが、アタッチメントでもう1画面増やすことができます。

この画面は製品に付属されています。

この2画面は、それぞれ独立しているため、二つのアプリを同時に扱えるというメリットがあります。

使い方次第では便利なのかもーと思います。

しかも価格も抑えめ。

スペックの比較です。

比較するのはPixel4です。

Pixel4 Pixel4 XLLG G8X ThinQ
ディスプレイ5.7インチ6.3インチ6.4インチ、6.4インチ
解像度FHD+ 19:9QHD+ 19:9FHD+ 2340×1080ドット
プロセッサSnapdragon855Snapdragon855 SDM855
メモリ6GB 6GB 6GB
ストレージ64GB/128GB 64GB/128GB 64GB
サイズ147×68.8×8.2mm160.4×75.1×8.2mm 160×76×8.4mm
2画面では
166×164×15.0mm
重さ162g193g 193g 2画面では 331g

また、おサイフケータイ、指紋認証、ワンセグ、フルセグが付いています。本体のみ防水・防塵仕様になっています。

お値段、合計55440円。

このスペックで5万円台か。どこかでコスト削っているのか?

そうだな・・・2画面あるのだから、テレビみながらツイッターできる、と言うことができるのか。

それはそれで便利かも。

別に今のPixel3に不満は無いけどね。

バナークリックで応援よろしくお願いします。

【Laravel】スタイルを整える

前回までの様子はこちら。

最新ソースはこちら。

https://github.com/takishita2nd/hotel-mng

まあ、ここまで見ていただいた方々は、ほぼ100%思っていることがあると思います。

見づらい。

せめて、罫線ぐらい引けよ。

ということで、やります。

Laravelでは、public/css/app.cssを読み込んで、スタイルを設定しています。

じゃあ、ここにスタイルを書き足せばいいのか?と思うかもしれませんが、Laravelでは、もっと便利な方法があるんです。

sass/scssというんですけどね。

こちらにスタイルを書き込み、node.jsのプログラムを実行して、app.cssを作成することができるんです。

sass/scssは普通にCSSを書くよりも、少ないコードでスタイルをかけるので便利でした。

まずは、node.jsの準備。

$ sudo apt install nodejs
$ sudo apt install npm
$ npm install
$ npm run dev

もし、npm installに失敗した場合は、imagemin-pngquantのバージョンが一致していないので、package.jsonのdevDependenciesに以下を書き足します。

        "imagemin-pngquant": "5.0.1"

npm installが完了すれば、準備完了。

npm run devを実行すると、sass/scssのコンパイルが実行されます。

スタイルは何度も書き換えることが多いので、コンパイルが面倒くさい人は、

$ npm run watch

を入力すると、sass/scssを保存するたびに、それを検出してコンパイルしてくれます。

では、sass/scssを作成します。

resource/assets/sassの下に、_Management.scssを作成し、app.scssに以下を追加します。

@import "Management";

そして、_Management.scssに記述を追加。

table.management {
    width: 100%;
    tbody tr{
        th {
            border: solid;
            border-width: thin;
        }
        .name{
            width: 15%;
        }
        .address{
            width: 20%;
        }
        .phone{
            width: 15%;
        }
        .num{
            width: 10%;
        }
        .date{
            width: 10%;
        }
        .command{
            width: 5%;
        }
        td {
            border: solid;
            border-width: thin;
        }
        .name{
            width: 15%;
        }
        .address{
            width: 20%;
        }
        .phone{
            width: 15%;
        }
        .num{
            width: 10%;
        }
        .date{
            width: 10%;
        }
        .command{
            width: 5%;
        }
    }
}

bladeにスタイルを適用します。

                    <table class="management">
                        <tr>
                            <th class="name">名前</th>
                            <th class="address">住所</th>
                            <th class="phone">電話番号</th>
                            <th class="num">人数</th>
                            <th class="date">宿泊日</th>
                            <th class="num">宿泊日数</th>
                            <th class="command">編集</th>
                            <th class="command">削除</th>
                        </tr>
                    @foreach ($registerLists as $list)
                        <tr>
                            <td class="name">{{ $list->name }}</td>
                            <td class="address">{{ $list->address }}</td>
                            <td class="phone">{{ $list->phone }}</td>
                            <td class="num">{{ $list->num }}</td>
                            <td class="date">{{ $list->start_day }}</td>
                            <td class="num">{{ $list->days }}</td>
                            <td class="command">{{ Html::link('/management/'.$list->id.'/edit', '編集') }}</td>
                            <td class="command">{{ Html::link('/management/'.$list->id.'/conform', '削除') }}</td>
                        </tr>
                    @endforeach
                    </table>

これで見た目がだいぶ良くなりました。

バナークリックで応援よろしくお願いします。

自分、ぼっちですが何か?