2017-03-24 4 views
1

주기적으로 실행하는 대신 특정 타임 스탬프에서 한 번만 함수를 실행하는 방법은 무엇입니까?Laravel의 작업 스케줄러를 주어진 타임 스탬프에서 한 번만 실행하도록 설정하는 방법은 무엇입니까?

내 응용 프로그램은 다음과 같습니다. id (기본 키)와 시간 (정수로 저장된 시간 스탬프) 2 행이있는 테이블이 있습니다. 이제 각 항목에 대해 테이블에 저장된 타임 스탬프에서 실행할 함수를 호출하려고합니다. 이것을 어떻게 성취합니까?

작업 스케줄러 대신 사용할 수있는 방법이 있습니까? Laravel 5.4 (문제가있는 경우)를 사용하고 있습니다.

편집 : 해결 방법은 알고 있지만 가장 효율적인 해결책을 찾고 있습니다.

답변

0

매분마다 스케줄러를 실행하고 해당 기간에 기록을 선택하면 &이 기능을 실행합니다. 초가 중요하지 않다는 가정하에 아래 코드를 작성했습니다. 초가 중요한 경우 매 초마다 스케줄러를 실행하는 방법을 확인해야하지만 개념은 동일합니다.

희망이 당신이

use Carbon\Carbon; 
... 
$schedule->call(function() { 

    // Look in your table for `time` in current minute, between 0-59s 
    $entries = TheTable::where([ 
     ['time', '>=', Carbon::now()->second(0)->timestamp], 
     ['time', '<=', Carbon::now()->second(59)->timestamp] 
    ]); 

    // Loop through the results & call the function 

})->everyMinute(); 
+0

예,이 내 문제를 해결 않습니다 도움이 될 것입니다. 사실, 이것은 내 마음에 온 첫 번째 일이었습니다. 하지만 다소 비효율적입니다. 매분마다 데이터베이스 쿼리를 호출합니다. 작업이 완료된 후에도 계속 실행됩니다. 더 나은 대안이 없습니까? 그렇지 않다면 나는이 속임수로해야 할 것이다. –

+0

응답을 캐시하지 않는 이유는 무엇입니까? 그렇게하면 데이터베이스에 한 번만 액세스하면됩니다. 다시 실행해야하는 경우 캐시 시간 초과를 설정하거나 적절한 이벤트를 기반으로 캐시를 지울 수 있습니다. –

관련 문제