이것은 원시 쿼리입니다.원시 쿼리를 Laravel Eloquent way로 변환하는 방법?
어떻게 Laravel 웅변으로이 변환
DB :: 원시 ("상태 = 1 지금은() 아이디 DESC의 LIMIT 1 BY START_TIME 및 END_TIME의 ORDER BETWEEN WHERE TBLE SELECT * FROM") ?
이것은 원시 쿼리입니다.원시 쿼리를 Laravel Eloquent way로 변환하는 방법?
어떻게 Laravel 웅변으로이 변환
DB :: 원시 ("상태 = 1 지금은() 아이디 DESC의 LIMIT 1 BY START_TIME 및 END_TIME의 ORDER BETWEEN WHERE TBLE SELECT * FROM") ?
(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();
DB::table('tble')::where('status',1)
->where('start_time', '<=', Carbon::now())
->where('end_time', '>=', Carbon::now())
->orderBy('id')
->first();
간단한 날짜 처리 패키지 Carbon을 사용하여이를 수행 할 수 있습니다.
사용을 시도 테이블에 대한 모델을 작성하는 대신 여기서 ('status', 1). -> Laravel 5.4 필요합니다. –
[Eloquent Model] (https://laravel.com/docs/5.4/eloquent#defining-models) 정의도 고려해보십시오. 예를 들어, 'tble'테이블의 모델이 'Tble'이되면 DB :: table ('tble')을 다음과 같이 바꿀 수 있습니다 :: Tble :: – ochhii
@ PatrykWoziński의 where 구문에 2 개의 매개 변수를 전달할 수 있습니다. Laravel 5.4이고 연산자는'='이라고 가정합니다. –
이 곳
DB::table('tble')::where('status',1)
->whereBetween(Carbon::now(), ['start_time', 'end_time'])
->orderBy('id')
->first();
감사합니다.이 메시지가 인쇄됩니다. 'status' = 1이고'2017-05-22 10 : 08 : 16' 사이의'questions'에서 '* id' asc limit 1'에 의해 start_time과 end_time 순서 사이에 '*'가 틀립니다. –
자세히 대답 해 주셔서 감사합니다. 매우 유용합니다. –
이 쿼리는 이것을 인쇄합니다. select * from'questions'는'status' = 1이고'start_time'> = '2017-05-22 10:03:48'및'end_time' <= '2017-05-22 10:03:48'입니다. 이 범위 내에서 값이 종료 되더라도 'id'오름차순으로 null을 반환합니다. –
@KhiradBanu 나는 업데이트 된 답변을 확인했습니다. 웅변적인 쿼리는 이전에 잘못된 날짜 비교를 사용했습니다. 내 대답에서 새 코드를 사용하도록 코드를 변경하십시오. 올바른 검사는'start_time <= '2017-05-22 10:03:48'이고 end_time> = '2017-05-22 10:03:48'입니다. 이것은 틀린 질문입니다. – Sandeesh