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

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

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

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

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

4109閲覧

【Laravel】groupByを使ったcountの方法

mank

総合スコア11

Laravel

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

PHP

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

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/05/27 06:47

編集2019/05/27 07:04

前提・実現したいこと

LaravelとPHPを勉強し始めて10日くらいの初心者です。
DBにアクセスしてその月のチーム内(チームは1つだけ)のユーザー毎のプレイ数をカウントして
viewのテーブルに送りたいと考えていますが、思っている結果にできないので相談させてください。
理想は下記の"補足"のようにしたいのですが、数値の引き出し方法や計算法がまだ理解不足でして
どうかご教示をお願いいたします。

該当のソースコード

Controller

1private function getMonthPlay(string $user_id, Team $team) 2{ 3 $date = Carbon::now(); 4 $plays = Play::select('accountId', DB::raw('count(created_at) as total')) 5 ->where('team_id', $team->id) 6 ->whereMonth('created_at', $date->month) 7 ->GROUPBY('accountId') 8 ->get(); 9 10 return $plays; 11} 12 public function playerMember(Request $request) 13 { 14 15 $user = Auth::user(); 16 $teams = $user->teams; 17 $team = $teams[0]; 18 $users = $team->users; 19 20 $team_id = $team->id; 21 $user_id = $user->id; 22 23 $month_plays = $this->getMonthPlay($user_id,$team); 24 return view('playerMember',compact('users','user','month_plays')); 25 } 26

view

1<table> 2<tr> 3<th>Id</th><th>play数</th> 4 @foreach ($users as $user) 5 <tr> 6 <td>{{$user->id}}</td> 7 <td>{{$month_plays}}</td> 8 9 </tr> 10 @endforeach 11 </table>
Id play数 3 [{"accountId":1,"total":10}] 1 [{"accountId":1,"total":10}] 2 [{"accountId":1,"total":10}]

補足情報

Id play数
3 1
1 4
2 5

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

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

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

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

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

m.ts10806

2019/05/27 06:49

タイトルには要件を記載してください。 https://teratail.com/help/question-tips#questionTips3-1 >ありがちな失敗としては、「助けてください」「初心者です」という表題をつけてしまうことです。 また「初心者アイコン」があるのでそちらを利用してもらえれば良いですし、 「Laravel」もタグがあるのでタイトルに含む必要はありません。 質問は編集できますので適宜ご対応ください。 あと・・・「Laravelを勉強し始めて10日」とのことですが、PHP自体はどうでしょうか。
m.ts10806

2019/05/27 06:51

あと、ちょっと細かいですが、SELECT()ではなくselect()ですね。関数は大文字小文字大別しない言語ですが、確実に書いておいたほうが良いです。
mank

2019/05/27 06:53

すみません、ご指摘ありがとうございます。PHP自体も同様に10日ほどです。タイトル修正いたします。
m.ts10806

2019/05/27 06:55

なるほど。では、Laravelはかなり厳しそうですね・・・。 んーちょっと悩みますね。オブジェクト指向をきちんとおさえてないといけないところはあるので。
m.ts10806

2019/05/27 07:02

これも細かいのですがgrouoByではなくgroupByですね。さすがにこれを間違えると機能しません(未定義関数のエラーが出ます)
退会済みユーザー

退会済みユーザー

2019/05/27 07:06

コードを書く環境を整えたほうが良いのでは? 文法エラーを指摘してくれるようなの。
mank

2019/05/27 07:06

ご指摘重ねてありがとうございます、オブジェクト指向もなんとなくでしたら理解してきてはいるのですが
m.ts10806

2019/05/27 07:12

10日でオブジェクト指向を何となくでも理解できるならすごいですね。私はいまだにPHPマニュアル確認しながら書いていますし。(もちろん「コピペして間違いなく機能を使うため」という要件が大きいですが) ただ、SQLをきちんと書けないと今回の対応は一筋縄ではいけないので「こういう定義のテーブルにこういうデータが入ってきていてこういうSQLを動かしてこういう結果を得たい」という風に具体的に設計から落とし込む必要があると思います。
mank

2019/05/27 07:16

ありがとうございます。理解というのは言葉が過ぎていたと思います。もう少し設計から考え直してみます。
mank

2019/05/27 07:23

コードを書く環境も見直してみます。ありがとうございます。
m.ts10806

2019/05/27 07:26

それも見直しは必要ですが、質問に追記してもらえれば的確なアドバイスに可能になりますので(特にテーブル定義、データ、想定しているSQL)
hentaiman

2019/05/28 22:20

SQLはcreate tableもselectも打てないけどフレームワークを使ったDB使うコードは書ける、みたいな人が一時増えてましたよね。特にrails流行った時期。 当然分かる側の人に取ってはエーッ!?て思う事態だけど、分からない人はデータが多くなくたまたま負荷がかからず複雑でない処理なら対応出来てしまっているから、それが良いことなのか悪いことなのか分からない。
guest

回答1

0

ベストアンサー

問題解決の糸口として、
Laravelのクエリビルダを使って集計処理をするのは、初学者には複雑なので、一度、素のSQL文で目的の集計処理ができるようにしてみてください。
その後、Laravelでは以下のように、SQL文とプレースホルダーを使ってSQL文を安全かつ簡単に実行できます。

$users = DB::select('select * from users where active = ?', [1]);

Laravel 5.8 データベース:利用開始
SQLクエリの実行

投稿2019/05/27 12:45

aro10

総合スコア4106

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

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

mank

2019/05/28 19:42

返信が遅くなって申し訳ないです。アドバイスありがとうございます。今頂いたアドバイスをもとに順番に集計処理を試していっている状況です。少しずつですが雰囲気がつかめてきました!ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問