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

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

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

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

Q&A

解決済

1回答

592閲覧

週ごとのスコアを出したい

退会済みユーザー

退会済みユーザー

総合スコア0

Laravel

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

0グッド

0クリップ

投稿2020/06/09 01:36

前提・実現したいこと

Laravelで週のスコアを出すのと、保存期限が過ぎたらデータベースから自動的に削除される様にしたいです。

質問点

質問点として週のスコアはcreated at で現在日時と合っているかで抽出しているのですが、あまり炉軸的にはよろしくないかと思いますので、他にはどの様な方法があるのか。
また、一ヶ月間のスコアのみをデーターベースに保存したいので、どの様な方法で期限の過ぎたデータを削除すれば良いのでしょうか

補足情報(FW/ツールのバージョンなど)

Laravel 7.x

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

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

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

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

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

guest

回答1

0

ベストアンサー

期間の過ぎたデータを削除するにはartisanコマンドを作成して、スケジューラーで週次で実行して、スコアの保存後一週間前のデータを消すなどしたらうまくいくかと思います。
週のスコアに関してはなんのスコアかわからないため具体的な回答はできないですが、例えばユーザーごとにスコアが必要な場合、同じように週次理でバッチを動かすようにして、週毎のスコアを保存した後にDBのデータも同じように削除していくようにすれば実現できると思います。
速さ的にも毎回毎回集計するのではなく、重い処理をアクセス数の少ない時間帯にやってしまって、実際に動かしている時にはselectだけの軽い処理をすれば速さも改善できますね。
月次の場合でもスケジューラーを動かすタイミングを週末から月末に変えるだけで問題なく同じような挙動ができると思います。
詳しい具体的な方法は、追記があれば回答いたします。

タスクスケジューラーについては例えばこのURLとかは参考になるのではないでしょうか?
https://readouble.com/laravel/5.7/ja/scheduling.html
以上のような回答になりますが、もし上記の方法で実現が難しいようであれば追記をお願い致します。

投稿2020/06/09 02:07

編集2020/06/09 02:13
774

総合スコア79

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

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

退会済みユーザー

退会済みユーザー

2020/06/09 02:21

ご回答ありがとうございます! ご教示いただいた方法で挑戦してみます。 artisan コマンドでまさかできるとは思いませんでした・・・ 一般的にもこの様な方法は使われているのでしょうか?というのもLaravel以外では対応できないのかと思いまして、、
774

2020/06/09 02:29

私が経験したことがある方法ではですが、AWSとかですとec2の方で定期実行させて、特定のURLを決まった時刻に叩かせる方法はございますね。 もちろん現段階で集計している方法がわかりませんので、例えば特定のURLをpostした時に集計処理を走らせるようにして、EC2の設定で決まった時刻にURLを叩くようにするとか? ただまぁめんどくさいので、コマンド作成した方が拡張性のことなど含めていいと思いますよ。 例えば今週次や月次とかで実行しているタスクを年次にしたい場合、laravelですとタスクスケジューラーの実行タイミングを調整すればいけますので。 先ほどの例のようにEC2側にURLで設定してしまうと、例えば外部から悪意を持ったユーザーがURLを叩いた時にどうするかの対処に問題がございますし、私はコマンドで登録する方法が一番いいと思います。
774

2020/06/09 02:31

一般的にこの方法が使われているかということでしたら、以前経験した現場ではコマンドで管理して定期実行するような方法で行なっていました。
退会済みユーザー

退会済みユーザー

2020/06/09 02:35

分かりました!ありがとうございます。 蛇足にはなるのですがデータを削除するというのは少しリスキーな様にも感じます。csvでエクスポートする方法で何か参考になるものがあれば教えていただきたいです。
774

2020/06/09 02:38

完璧に削除をしたくないのであれば物理削除ではなく論理削除で実装をした方がよろしいかと。 論理削除はLaravelに削除したと認識させるための方法ですので、論理削除をしたカラムは取り出せなくなります。 csvへのエクスポートの方法はまぁjoinとかでCSVを書き出してファイル管理すればいけるっちゃ行けるのですけど、バックアップのためだけにファイル出力して正規表現でファイルを探してみる処理を追加するのもめんどくさいので、DBの容量とかをひとまず考えないのであれば論理削除での実装で万事解決だと思います。
退会済みユーザー

退会済みユーザー

2020/06/09 03:09

容量を加味しての質問でした。 丁寧にありがとうございます。
774

2020/06/09 03:12

いえいえ、論理削除にしても例えば十万とか行かない限りは特に容量を気にする必要もありませんし、論理削除でひとまずはいいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問