특정 날짜부터 특정 날짜까지의 보고서를 표시하는 보고서 페이지를 만들려고합니다. 내 현재 코드는 다음과 같습니다.
$now = date('Y-m-d');
$reservations = Reservation::where('reservation_from', $now)->get();
이것이 일반 SQL에서하는 일은 select * from table where reservation_from = $now
.
여기에이 쿼리가 있지만 웅변적인 쿼리로 변환하는 방법을 모르겠습니다.
SELECT * FROM table WHERE reservation_from BETWEEN '$from' AND '$to
위의 코드를 웅변적인 쿼리로 어떻게 변환 할 수 있습니까? 미리 감사드립니다.
답변
이 whereBetween
메서드는 열의 값이 두 값 사이에 있는지 확인합니다.
$from = date('2018-01-01');
$to = date('2018-05-02');
Reservation::whereBetween('reservation_from', [$from, $to])->get();
경우에 따라 기간을 동적으로 추가해야합니다. 를 기반으로 @Anovative 당신이 할 수있는 코멘트 :
Reservation::all()->filter(function($item) {
if (Carbon::now->between($item->from, $item->to) {
return $item;
}
});
더 많은 조건을 추가하려면을 사용할 수 있습니다 orWhereBetween
. 날짜 간격을 제외하려면을 사용할 수 있습니다 whereNotBetween
.
Reservation::whereBetween('reservation_from', [$from1, $to1])
->orWhereBetween('reservation_to', [$from2, $to2])
->whereNotBetween('reservation_to', [$from3, $to3])
->get();
다른 유용한 곳에 절 : whereIn
, whereNotIn
, whereNull
, whereNotNull
, whereDate
, whereMonth
, whereDay
, whereYear
, whereTime
, whereColumn
,whereExists
, whereRaw
.
답변
필드가 datetime
대신에있는 경우 다른 옵션 date
( 두 경우 모두에서 작동하지만 ) :
$fromDate = "2016-10-01";
$toDate = "2016-10-31";
$reservations = Reservation::whereRaw(
"(reservation_from >= ? AND reservation_from <= ?)",
[$fromDate." 00:00:00", $toDate." 23:59:59"]
)->get();
답변
다음이 작동합니다.
$now = date('Y-m-d');
$reservations = Reservation::where('reservation_from', '>=', $now)
->where('reservation_from', '<=', $to)
->get();
답변
db의 두 날짜 사이에 현재 날짜가 있는지 확인하려면 => 여기에서 고용인의 지원이 오늘 날짜에 존재하는 경우 쿼리가 지원 목록을 가져옵니다.
$list= (new LeaveApplication())
->whereDate('from','<=', $today)
->whereDate('to','>=', $today)
->get();
답변
이 시도:
단일 열 값을 기반으로 가져 오기 때문에 쿼리를 다음과 같이 단순화 할 수 있습니다.
$reservations = Reservation::whereBetween('reservation_from', array($from, $to))->get();
조건에 따라 검색 : laravel 문서
이것이 도움이 되었기를 바랍니다.
답변
그리고 모델 범위를 만들었습니다.
범위에 대한 추가 정보 :
암호:
/**
* Scope a query to only include the last n days records
*
* @param \Illuminate\Database\Eloquent\Builder $query
* @return \Illuminate\Database\Eloquent\Builder
*/
public function scopeWhereDateBetween($query,$fieldName,$fromDate,$todate)
{
return $query->whereDate($fieldName,'>=',$fromDate)->whereDate($fieldName,'<=',$todate);
}
컨트롤러에서 상단에 Carbon Library를 추가합니다.
use Carbon\Carbon;
또는
use Illuminate\Support\Carbon;
얻기 위해 지금부터 지난 10 일 간의 기록
$lastTenDaysRecord = ModelName::whereDateBetween('created_at',(new Carbon)->subDays(10)->toDateString(),(new Carbon)->now()->toDateString() )->get();
지금부터 지난 30 일 기록 을 얻으려면
$lastTenDaysRecord = ModelName::whereDateBetween('created_at',(new Carbon)->subDays(30)->toDateString(),(new Carbon)->now()->toDateString() )->get();
답변
datetime 필드가 다음과 같아야 할 때 필요하다면.
return $this->getModel()->whereBetween('created_at', [$dateStart." 00:00:00",$dateEnd." 23:59:59"])->get();