2017-03-27 5 views
1

私はLaravelとのセッションやイベントを管理しようとしていますが、本当に分かりません。Laravelのイベントを管理するには5

データベースに有効期限のあるオブジェクトがあります。私は現在の時刻が有効期限と等しいときに彼の状態を変更したいと思います。リスナ/イベントやセッション変数などを使用する必要がありますか?

カートにも同じ問題があります。私は15分後にカートを空にしたいと思います(私はCrinsaneカートを使用しています)。

アイデア?

よろしく、

ジェレミー

+0

おそらく、まず最初にcronが必要です。カートを空にすることについては、カートの最後のアクティビティが>(時間 - (60 * 15))かどうかをチェックするルートの周りにミドルウェアをラップすることができる理由は分かりません。 – Ian

答えて

0

あなたはそのためのscheduled taskを作成することができます。有効期限が切れたすべてのレコードを確認し、ステータスを更新します。

Model::where('status', 0) 
    ->where('expiration_date', '<', Carbon::now()) 
    ->update(['status' => 1]); 

次に、タスクを追加します。あなたは毎分このタスクを実行したい場合たとえば、:

$schedule->command(status:update)->everyMinute(); 
+0

この応答はありがとうございます。それは完璧に動作するはずです。しかし、私が状態の変化を自動的に検出したいのであれば、それは可能ですか?毎分分のタスクを実行すると重くなる可能性があるので、 –

+0

@JérémyAublancこれを自動的に行うことはできません。あなたができることは、すべてのリクエストでチェックを行うことですが、スケジュールされたタスクを実行することはずっと優れています。 –

0

これは簡単にLaravel自体のTask Schedulingを使用することで対応することができ、問題のように聞こえます。

あなたは、2つのジョブ必要があるでしょう:

  • 毎日解雇された最初のニーズは(私は仮定)をしてexperiation日が有効期限が切れているすべてのオブジェクトを選択するには、クエリを実行します。

Cart::where('updated_at, '<', Carbon::now()->subMinutes(15))->delete();

:カートは15分以上アクティブで、それはそうようであれば、それを削除した天気をチェックするために、第2のニーズ

  • (クエリのアレクセイの答えを参照してください)

  • +0

    カートのケースについては、私はそれを行うことができますか?ユーザーが最初のアイテムを追加したときに、「未使用カート」の15分後に空になったときに、「タイマー」を実行する必要があるためです。セッション変数(各ユーザに格納)を使用する方が良いのではないですか?私は本当にこの場合と混乱しています... –

    +0

    たぶんイベントを使用して '私はちょうど私のカートに商品を追加..'? –

    +0

    あなたのウェブサイトでどのような動作をしたいかによって異なります。あなたは長い間、またはユーザーが長引くときに非アクティブになっているカートを削除しますか? 24時間以上経過したカートを削除する毎日のクエリを実行して、その瞬間にユーザーが使用しているカートを決して削除しないようにします。 –

    関連する問題