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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

Q&A

1回答

1840閲覧

Laravel Eloquentのデータ取得について

kata.

総合スコア6

Laravel

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

PHP

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

0グッド

0クリップ

投稿2020/05/14 23:23

LaravelのEloquentのデータ取得について
DBからデータの取得方法について困っています。

目的:各投稿者の過去1日の投稿数を集計し、投稿数が多い順に並び替え、Vueに渡したい。
(各配列の要素ごとに過去1日の投稿数を集計(合計)し、投稿数が多い順に各配列を並び替えたい)

現状
・テーブルA(投稿者基本データ)、とテーブルB(投稿数データ)が用意されている

●テーブルAのカラム(id、user_id、username、created_at、updated_at)
●テーブルBのカラム(id、user_id、post_count、created_at、updated_at)
※テーブルBの post_count は数値型で1時間ごとの投稿数が数値で入っています。

・テーブルAとテーブルBは1対多の関係と考え、
テーブルAには、モデルにhasmeny
テーブルBには、モデルにbelongsTo
を使って紐付けを行っています。

Eloquentを使い、次の様に書いたのですが、ここから合計の出し方が分からなく詰まっています。

php

1 $DayRanking = Postuser:: 2 with(['post_counts' => function($q){ 3 $q->whereDate('created_at', date("Y-m-d", strtotime("-1 day"))); 4 }])->get();

中身を確認すると、下記の様に1人に対する投稿数のデータが紐づいています

JSON

1 "DayRankingData": [ 2 { 3 "id": 1, 4 "user_id": "1", 5 "user_id": "Aさん", 6 "created_at": "2020-04-26 16:24:39", 7 "updated_at": "2020-05-15 00:00:03", 8 "post_counts": [ 9 { 10 "id": 1, 11 "user_id": "1", 12 "post_count": "4", 13 "created_at": "2020-05-14 00:40:03", 14 "updated_at": "2020-05-14 00:40:03" 15 }, 16 { 17 "id": 2, 18 "user_id": "1", 19 "post_count": "10", 20 "created_at": "2020-05-14 00:40:03", 21 "updated_at": "2020-05-14 00:40:03" 22 } 23 ] 24 },

この様にしたいです

JSON

1 "DayRankingData": [ 2 { 3 "id": 1, 4 "user_id": "1", 5 "user_id": "Aさん", 6 "created_at": "2020-04-26 16:24:39", 7 "updated_at": "2020-05-15 00:00:03", 8 "post_counts": [ 9 { 10 "user_id": "1", 11 "post_count": "14", 12 "created_at": "2020-05-14 00:40:03", 13 } 14 }, 15

・・Aさん、Bさん、Cさんと続き、post_countが多い順に並び替えがしたいのですが、
クエリビルダを使用して書くにも、うまくできず、いい方法が思いつきません。
また、投稿日時(post_countsのcreated_at)は一番最後の値だけ残したいです。

何かいい方法があればご教授頂きたいです。
何卒よろしくお願いします。

larabelバージョン:Laravel5.8
仕様しているDB:MySQL

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

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

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

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

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

guest

回答1

0

php

1Postuser::withCount('post_counts') 2 ->orderByDesc('post_counts_count') 3 ->get();

多分これで行けるかも

投稿2020/05/15 00:23

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問