質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
grep

grepはコマンドライン上でテキスト検索を可能にするユーティリティーです。元はUnixのために用意されたものです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

Q&A

解決済

1回答

2089閲覧

Laravel eloquentによりデータをgrepした後特定の条件を抽出する

royal1997

総合スコア3

grep

grepはコマンドライン上でテキスト検索を可能にするユーティリティーです。元はUnixのために用意されたものです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Eloquent

Eloquentとは、PHPフレームワークのLaravelに最初から含まれているORM(Object-relational mapping:オブジェクト関係マッピング)です。

0グッド

0クリップ

投稿2021/06/21 06:59

現在Laravelの勉強中です。
今回Controllerで下記の予約テーブルを元にgrepしてそれぞれを加工しました。
id|user_id|date(日付)|count(人数)|
|:--|:--:|--:|
|1|1|2021-06-12 18:00|1|
|2|1|2021-06-17 19:00|2|
|3|1|2021-06-19 19:00|4|
|4|1|2021-06-19 20:00|2|

①データベースからdate(日付)ごとにグループ化して取得

Nodate
12021-6-12
22021-6-17
32021-6-19

②日付ごとの行数を取得

No行数
11
21
32

③日付ごとの人数を合計したものを取得

No人数
11
22
34

こちら3点の処理を実装したものが下記のコードになります。

namespace App\Http\Controllers\Admin; use DB; use App\Model\User; use App\Model\Admin; use App\Model\Reservation; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; ----中略------------ public function eventsmonth() { $admin_id = Auth::id(); //予約テーブルから①の日付ごとになるように取得 $dates = Reservation::where('admin_id', $admin_id)->select('date', 'count', DB::raw('DATE_FORMAT(date, "%Y-%m-%d") as eventsday'))->get('date')->groupBy('eventsday'); $days = []; $pairs = []; $counts = []; foreach($dates as $key => $date) { //②の処理日付ごとの行数を取得 $pair = $date->count(); $pairs[] = $pair; $day = $key; $days[] = $day; $counter = 0; for($i=0; $i<$pair; $i++) { //③の処理 日付ごとの人数の合計を計算 $count = $date[$i]->count; $counter += $count; } $counts[] = $counter; } dump($days); dump($pairs); dd($counts); }

こちらで実装したものが下記のように取得できました。
なお実際に使用しているテーブルとは値が違うため、内容は異なります。

array:4 [▼ 0 => "2021-06-23" 1 => "2021-06-17" 2 => "2021-06-18" 3 => "2021-06-19" ] array:4 [▼ 0 => 2 1 => 2 2 => 2 3 => 3 ] array:4 [▼ 0 => 8 1 => 4 2 => 26 3 => 10 ]

しかし、こちらの処理では繰り返し処理が重なっていたり、変数などが入り混じって見にくかったりします。
この処理をもう少し短く分かりやすく書く方法はありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/06/21 07:12

結果の再加工は非効率なので、ズバリ欲しいデータが得られるクエリーをクエリビルダで作るんじゃないかなと。
退会済みユーザー

退会済みユーザー

2021/06/21 07:12

結果の再加工は非効率なので、ズバリ欲しいデータが得られるクエリーをクエリビルダで作るんじゃないかなと。
royal1997

2021/06/21 12:40

そのクエリビルダのやり方が分からない状態です。
guest

回答1

0

自己解決

下記の処理で私がしたかったことを実装することができました。

$dates = Reservation::where('admin_id', $admin_id)->selectRaw("DATE_FORMAT(date, '%Y-%m-%e') as eventsday ,COUNT(count) as pairs ,SUM(count) as total_count")->groupBy('eventsday')->get();

投稿2021/06/22 23:09

royal1997

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問