• Home
  • PHP Laravelフレームワークを用いた期間重複検索の実装ガイド

PHP Laravelフレームワークを用いた期間重複検索の実装ガイド

記事のサムネイル

Laravel とは

Laravelとはの画像

Laravel とは、2011 年にリリースされた比較的新しい VMC モデルのフレームワークです。比較的新しいながら、PHP におけるフレームワークの中では、代表的なフレームワークとなっています。

基本的な考え方

基本的には以下の考えで重複期間は取得できます。

検索開始日付 <= 対象終了日付 AND 検索終了日付 >= 対象開始日付

重複チェックの画像

Laravel での検索期間と重複した期間を持つデータを取得する条件

以下の二つについて解説します。

  • 開始日、終了日が決まっている場合
  • 終了日が不定の状態が考えられる場合

開始日、終了日が決まっている場合

開始日と終了日が定まっている場合には基本に基づき、以下の query で検索期間内のデータを取得できます。

$start_dateが検索条件の開始日時で、$end_dateが検索条件の終了日時です。

$duplication_date = $this
->where(function ($q) use ($start_date, $end_date) {
   $q->where('sample_start_date', '<=', $end_date)
   ->where('sample_end_datee', '>=', $start_date)
})
->get();

終了日が不定の状態が考えられる場合

終了日に不定の場合がある場合は以下の query で取得できます。

$start_dateが検索条件の開始日時で、$end_date が検索条件の終了日時です。

if ($end_date) {
  $duplication_count = $this
  ->where(function ($q) use ($start_date, $end_date) {
      $q->where('sample_start_date', '<=', $end_date)
      ->where('sample_end_date', '>=', $start_date)
      ->orWhere(function ($q) use ($end_date) {
          $q->where('sample_end_datee', null)
          ->where('sample_start_date', '<=', $end_date);
      });
  });
} else {
  $duplication_count = $this
  ->where(function ($q) use ($start_date) {
      $q->where('sample_end_datee', null)
          ->orWhere('sample_end_date', '>=', $start_date);
  });
}

両方とも日付の条件のみなので、実際に使用する場合は必要な条件を付けくわえてください。

おまけ 検索期間外のデータを取得する条件

検索期間外のデータを取得する条件は以下になります。

検索開始日付 > 対象終了日付 OR 検索終了日付 < 対象開始日付

対象期間外の画像

$duplication_date = $this
->where(function ($q) use ($start_date, $end_date) {
   $q->where('sample_start_date', '>', $end_date)
   ->where('sample_end_datee', '<', $start_date)
})
->get();

まとめ

いかがでしたでしょうか!

自分が実装を行う際に条件がどうなるのか迷った箇所だったので、備忘録としての役割も兼ねてまとめてみました!

実装やエラーが解決できない場合

プログラミングの実装やエラーでどうしてもわからない場合はメンターに相談するのが一番です。

考えている、見えている範囲が狭くなり、解決から遠くに行って何時間も、何日も経っていることなんてよくある話です。

そういう時は聞ける先輩や、メンターに相談することが大事です。

僕にも相談可能なので気軽に相談してください。

ご相談はこちら
(Twitterのプロフィールへ飛びます)

OTHER ARTICLES

  • Web制作

  • Rails

railsでjsではなくrubyでtooltipの単位を設定するときの話

2024/08/20
  • Web制作

  • Rails

Railsにおけるクラスメソッドとインスタンスメソッドの違いについて

2024/05/30
  • Web制作

  • Docker

  • Rails

DockerでRails7 + PostgreSQL + esbuildの環境を構築する方法

2024/05/16
  • Web制作

  • Rails

  • Docker

Dockerで建てたrails7環境で「undefined method `devise' for 〜」が発生した話

2024/05/16
  • Web制作

  • Rails

Ruby on RailsのルーティングとRESTfulルート

2024/05/09
  • Web制作

  • Rails

Ruby on Railsにおけるresourceとresourcesの違い

2024/05/01