2017-05-22 1 views

답변

2

(1 '=', '상태') app/Table.php

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Table extends Model 
{ 
    protected $table = 'tble'; 
} 

논리

$now = \Carbon\Carbon::now(); 

$result = \App\Table::where('status', 1) 
    ->where('start_time', '<=', $now) 
    ->where('end_time', '>=', $now) 
    ->orderBy('id') 
    ->first(); 
+0

자세히 대답 해 주셔서 감사합니다. 매우 유용합니다. –

+0

이 쿼리는 이것을 인쇄합니다. select * from'questions'는'status' = 1이고'start_time'> = '2017-05-22 10:03:48'및'end_time' <= '2017-05-22 10:03:48'입니다. 이 범위 내에서 값이 종료 되더라도 'id'오름차순으로 null을 반환합니다. –

+0

@KhiradBanu 나는 업데이트 된 답변을 확인했습니다. 웅변적인 쿼리는 이전에 잘못된 날짜 비교를 사용했습니다. 내 대답에서 새 코드를 사용하도록 코드를 변경하십시오. 올바른 검사는'start_time <= '2017-05-22 10:03:48'이고 end_time> = '2017-05-22 10:03:48'입니다. 이것은 틀린 질문입니다. – Sandeesh

1
DB::table('tble')::where('status',1) 
       ->where('start_time', '<=', Carbon::now()) 
       ->where('end_time', '>=', Carbon::now()) 
       ->orderBy('id') 
       ->first(); 

간단한 날짜 처리 패키지 Carbon을 사용하여이를 수행 할 수 있습니다.

+0

사용을 시도 테이블에 대한 모델을 작성하는 대신 여기서 ('status', 1). -> Laravel 5.4 필요합니다. –

+0

[Eloquent Model] (https://laravel.com/docs/5.4/eloquent#defining-models) 정의도 고려해보십시오. 예를 들어, 'tble'테이블의 모델이 'Tble'이되면 DB :: table ('tble')을 다음과 같이 바꿀 수 있습니다 :: Tble :: – ochhii

+1

@ PatrykWoziński의 where 구문에 2 개의 매개 변수를 전달할 수 있습니다. Laravel 5.4이고 연산자는'='이라고 가정합니다. –

0

이 곳

DB::table('tble')::where('status',1) 
         ->whereBetween(Carbon::now(), ['start_time', 'end_time']) 
         ->orderBy('id') 
         ->first(); 
+0

감사합니다.이 메시지가 인쇄됩니다. 'status' = 1이고'2017-05-22 10 : 08 : 16' 사이의'questions'에서 '* id' asc limit 1'에 의해 start_time과 end_time 순서 사이에 '*'가 틀립니다. –