簡體   English   中英

如何使用 laravel 按日期過濾記錄?

[英]How to filter records by date with laravel?

我有一個像這樣的過濾器

篩選

我有一個帶有 laravel 的工作日期過濾器。 問題是,如果我在沒有顯示記錄時不過濾我的記錄。

public function index(Request $request)
{
    $stats = [
        'done' => UserTransaction::where('status', UserTransaction::STATUS['done'])->count(),
        'canceled' => UserTransaction::where('status', UserTransaction::STATUS['canceled'])->count(),
        'all' => UserTransaction::count(),
    ];
    if ($request->start_date && $request->end_date){
        $dateS = new Carbon($request->start_date);
        $dateE = new Carbon($request->end_date);
        $result = UserTransaction::whereBetween('created_at', [$dateS->format('Y-m-d'), $dateE->format('Y-m-d')])->get();
    }
    if ($request->search) {
        $transactions = UserTransaction::search($request->search)->paginate(5);
    } else {
        $transactions = UserTransaction::paginate(5);
    }
    if ($transactions->count() == 0 && $request->search ) {
        msg()->warning('No records found');
    }
    return view('transaction::admin.index', compact('transactions', 'stats', 'result'));
}

您可以在查詢中使用 if 條件並刪除外部 if 條件

$result = UserTransaction::where(function($query)use($request){
    if(!empty($request->start_date)&&!empty($request->end_date)){
    
      $dateS = new Carbon($request->start_date);
      $dateE = new Carbon($request->end_date);
      $query->whereBetween('created_at', [$dateS->format('Y-m-d'), $dateE->format('Y-m-d')]);
    }
    })->get();

我會考慮稍微更改您的邏輯,以允許人們僅指定start date或僅指定end date ,這從可用性的角度來看是完全可能的。

創建一個查詢生成器,然后為start_dateend_date添加where子句(如果它們出現在您的$request object 中)。 如果它們沒有出現,那么您可以使用該查詢,因為您已經這樣做了。

$transactions = Transaction::query();

if ($request->start_date) {
  $query->whereDate('start_date', '>=', new Carbon($request->start_date));
}

if ($request->end_date) {
  $query->whereDate('end_date', '<=', new Carbon($request->end_date));
}

if ($requer->search) {
  $query->search($request->search);
}

$query->paginate(5);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM