ホームページ  >  に質問  >  本文

Laravel はプロジェクト終了日順に最新のプロジェクトを取得します

現在ログインしているユーザーのアイテムを取得するスコープを記述する必要があります。現在ログインしているユーザーがすべてのプロジェクトを表示する権限を持っている場合は、システム内のすべてのプロジェクトを一覧表示します。そうでない場合は、ログインしているユーザーによって作成されたプロジェクト、またはユーザーのタスクによって割り当てられたプロジェクトを一覧表示します。 Project モデルに次のスコープを書いてみました:

リーリー

withBudgetの範囲は次のとおりです

リーリー

これまでのところ機能していますが、正確ではありません。ログインしているユーザーが管理者であり、すべての権限を持っていることがわかっている場合でも、いくつかのアイテムしか取得されず、アイテムも降順で並べ替えられることがあります。end_date ではなく created_at< /代码> と思われる場合があります。

この問題を解決する方法はありますか?さらに詳しい情報が必要な場合はお知らせください

######編集### いくつかのクエリを削除すると、次のコード スニペットが機能します:

リーリー 次に、次のようにしてアイテムを取得します。 リーリー

上記のコード スニペットは機能しますが、実行することは 1 つだけではありません (今のところ積極的な読み込みのことは忘れてください)。期限までの残り時間に基づいてプロジェクトをリストする必要があります。したがって、期限が近い項目、期限がまだある項目、期限が切れている項目の順にリストする必要があります。
P粉773659687P粉773659687374日前441

全員に返信(1)返信します

  • P粉258788831

    P粉2587888312023-09-12 16:58:05

    順序付けの問題は、latest()orderBy('end_date', 'desc')latest() として呼び出していることだと思います。 created_at で動作します。いずれにしても独自の並べ替えを追加するので、おそらく latest() 呼び出しはまったく必要ありません。

    ユーザー スコープの問題に関しては、whereHasorWhereHas の代わりに 2 つの orWhereHas< /code> 呼び出しを使用しているかどうか疑問に思っていましたが、これは で機能する可能性があります。 scopeForUser 問題が発生します。

    おそらく別のアプローチは次のようになります:

    リーリー

    返事
    0
  • キャンセル返事