【Laravel 쿼리 빌더】where내에서 변수를 사용해 기간의 조건을 좁히는 방법

Laravel의 쿼리 빌더에서 where를 사용하여 대상 기간 내의 데이터를 검색하는 방법을 설명합니다.

버전은 6계입니다.

블로그에서 다음과 같은 기사도 쓰고 있습니다.

목표



기간의 시작일과 종료일이 있고, 기간 내의 데이터를 취득한다.

시작일:2021-06-01
종료일:2021-06-29


user_id
created_at


1
2021-06-01 12:21:33

2
2021-06-15 15:53:22

3
2021-06-30 09:22:12





user_id
created_at


1
2021-06-01 12:21:33

2
2021-06-15 15:53:22


샘플 코드



컨트롤러 (PostController.php)
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Post;←バージョン8系なら use App\Models\Post;

class PostController extends Controller
{
    public function index()
    {
        $this->posts = new Post();

        $start = '2021-06-01';
        $end   = '2021-06-29';
        $results = $this->posts->getUser($start, $end);

        return view('posts.index', compact(
            'results',
        ));
    }
}


$start,$end에 시작일과 종료일을 설정하고 인수로 모델에 변수를 전달합니다.

모델 (Post.php)
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;←記述を忘れない

class Post extends Model
{
    public function getUser($start, $end)
    {
      return DB::table('posts')
              ->select('user_id', 'created_at')
              ->where([
                ['created_at', '>=', $start],
                ['created_at', '<=', $end]
              ])
              ->get();
    }
}


모델에 논리를 씁니다.

where에서 대상 기간을 지정합니다.
덧붙여서 ->whereBetween('created_at', [$start, $end]) 에서도 같은 처리를 할 수 있습니다.
이쪽이 컴팩트하고 좋습니다.

뷰(index.blade.php)
<table>
    <thead>
      <tr>
        <th>日付</th>
        <th>ユーザーID</th>
      </tr>
    </thead>
    <tbody>
    @foreach ($results as $result)
      <tr>
        <td>{{ $result->created_at }}</td>
        <td>{{ $result->user_id }}</td>
      </tr>
    @endforeach
    </tbody>
</table>



이런 식으로 데이터를 얻을 수있었습니다.

만약 참고가 되면 잊지 않고 기사의 스톡 또는 LGTM를 부탁드리겠습니다.

블로그에서 다음과 같은 기사도 쓰고 있습니다.

좋은 웹페이지 즐겨찾기