테이블에 삽입 된 마지막 파일을 검색하고 싶습니다. 메서드 first()
가 존재하고 테이블의 첫 번째 파일을 제공하지만 마지막 삽입을 얻는 방법을 모르겠습니다.
테이블에 삽입 된 마지막 파일을 검색하고 싶습니다. 메서드 first()
가 존재하고 테이블의 첫 번째 파일을 제공하지만 마지막 삽입을 얻는 방법을 모르겠습니다.
답변:
지금 주문할 때와 같은 필드를 기준으로 내림차순으로 주문해야합니다. 예를 들어, 업로드가 완료되었을 때 타임 스탬프가있는 경우 이와 같은 작업을 수행 upload_time
합니다.
프리 라벨 4
return DB::table('files')->order_by('upload_time', 'desc')->first();
라 라벨 4 이상
return DB::table('files')->orderBy('upload_time', 'desc')->first();
라 라벨 5.7 이상
return DB::table('files')->latest('upload_time')->first();
업로드 시간, 내림차순으로 파일 테이블의 행을 정렬 하고 첫 번째 행을 사용합니다 . 이것이 가장 최근에 업로드 된 파일입니다.
orderBy
하지order_by
User::orderby('created_at', 'desc')->first();
orderBy('created_at', 'desc')
Files::orderBy(id', 'desc')->first();
날짜순은 날짜가 문자열이고 색인이 생성되지 않기 때문에 더 오래 작동합니다. 기본 키는 인덱싱되어 매우 빠르게 작동합니다. created_at가 색인화 되더라도 기본 문자열의 경우 INT가 아닌 색인화 된 문자열입니다. 색인 문자열의 성능이 떨어집니다.
orderBy('created_at', 'desc')
마지막 행을 제공하지 않기 때문에 대답이되어야합니다 . 예 : 3 개의 행은 정확히 동일한 TIMESTAMP 값을 가질 수 있으며 3과 함께 orderBy('created_at', 'desc')
3 개 중 첫 번째 (필수는 마지막
Laravel에서 제공하는 최신 범위를 즉시 사용하십시오.
Model::latest()->first();
그렇게하면 모든 레코드를 검색하지 않습니다. orderBy에 대한 더 좋은 지름길.
created_at
열 ($timestamps = true)
을 사용하지만 원하는 경우 비활성화 할 수 있으므로 정의되지 않은 경우 오류가 발생합니다.
Laravel의 기본 ORM 인 Eloquent를 사용하는지 여부는 언급하지 않았습니다. 당신이 만든 경우에, created_at에 의해 User 테이블의 최신 엔트리를 얻고 싶다면, 아마도 다음과 같이 할 수 있습니다 :
User::orderBy('created_at', 'desc')->first();
먼저 created_at 필드를 기준으로 사용자를 내림차순으로 정렬 한 다음 결과의 첫 번째 레코드를 사용합니다.
그러면 컬렉션이 아닌 User 개체의 인스턴스가 반환됩니다. 물론이 대안을 사용하려면 Eloquent 클래스를 확장하는 User 모델이 있어야합니다. 다소 혼란 스러울 수 있지만 시작하기가 매우 쉽고 ORM이 실제로 도움이 될 수 있습니다.
자세한 내용 은 매우 풍부하고 자세한 공식 문서 를 확인하십시오 .
라 라벨 컬렉션에는 마지막 방법이 있습니다
Model::all() -> last(); // last element
Model::all() -> last() -> pluck('name'); // extract value from name field.
이것이 가장 좋은 방법입니다.
all()
메소드가 실제로 모든 항목을로드 한다는 것을 지적하고 싶었습니다 . 수백만 개의 레코드가있는 테이블에서는 작동하지 않습니다.
last()
반환에게 하나의 웅변 인스턴스가 아닌 컬렉션, 그리고 호출 pluck()
이에하는 전화와 동일 Model::all()->pluck('name')
하므로 반환 name
의 속성 모든 테이블의 행
이 시도 :
Model::latest()->get();
Laravel 6.x에서 또 다른 멋진 방법입니다 (확실하지는 않지만 5.x에서도 작동해야 함).
DB::table('your_table')->get()->last();
당신도 필드에 액세스 할 수 있습니다 :
DB::table('your_table')->get()->last()->id;
get()
메소드는 모든 것을 가져오고 your_table
Collection을 생성하며 last()
메소드는 해당 콜렉션에서 마지막 항목을 가져옵니다. 따라서 테이블의 모든 데이터가 이미 메모리에로드되어 있습니다 (나쁜). 씬 뒤에`DB :: table ( 'items')-> latest ()-> first ();`를 사용하여`orderBy ($ column, 'desc')`를 수행하고 첫 번째 레코드를 가져와야합니다.
당신은 당신이 수행 할 때 그냥 Laravel 3, 4 삽입하는 실제 행을 찾는 경우 save
또는 create
같은 새로운 모델에 대한 조치를 :
$user->save();
-또는-
$user = User::create(array('email' => 'example@gmail.com'));
삽입 된 모델 인스턴스가 리턴되고 방금 작성된 사용자의 프로파일 페이지로 경로 재 지정과 같은 추가 조치에 사용될 수 있습니다.
저용량 시스템에서 마지막으로 삽입 된 레코드 작업을 찾는 것은 거의 항상 작동하지만 동시에 삽입해야하는 경우 잘못된 레코드를 찾기 위해 쿼리를 끝낼 수 있습니다. 이는 여러 테이블을 업데이트해야하는 트랜잭션 시스템에서 실제로 문제가 될 수 있습니다.