안녕하세요! 오늘은 6.8이 릴리즈 됐네요. 어서어서 따라잡아야 겠습니다. 오늘은 6.5.0, 6.5.1, 6.5.2에 추가된 기능을 한꺼번에 소개합니다.
레이지 컬렉션에서 remember()를 호출하면 한 번 DB에서 가져온 데이터는 기억하고 있다가 다시 DB에 요청하지 않습니다.
예제 1
$users = User::cursor()->remember();
// 아직 아무 쿼리도 실행되지 않음.
$users->all();
// 모든 값을 DB에서 가져옴.
$users->all();
// DB를 다시 조회하지 않고 캐시에서 데이터를 가져옴.
예제 2
$users = User::cursor()->remember();
// 아직 아무 쿼리도 실행되지 않음.
$users->take(5)->all();
// 쿼리가 실행되고 처음 5명의 유저를 DB에서 가져옴.
$users->take(20)->all();
// 처음 5명의 유저는 캐시에서 가져오고, 나머지는 DB에서 가져옴.
마지막으로 나타난 위치를 기준으로 그 이전 값을 반환하는 beforeLast()와 그 이후 값을 반환하는 afterLast()가 Str 헬퍼에 추가되었습니다.
$type = 'App\Notifications\Tasks\TaskUpdated';
Str::afterLast($type, '\\'); // TaskUpdated
$filename = 'photo.2019.11.04.jpg';
Str::beforeLast($filename, '.'); // photo.2019.11.04
쿼리 결과가 있거나 없을 때 임시 변수를 사용하지 않고 추가 행동을 연결해서 작성할 수 있게 되었습니다.
Before
$hasOpenDossier = $user->dossiers()
->whereNull('closed_at')
->exists();
if ($hasOpenDossier) {
abort(422, 'User already has an open dossier');
}
After
$user->dossiers()
->whereNull('closed_at')
->doesntExistOr(function () {
abort(422, 'User already has an open dossier');
});
Added LazyCollection::remember() method (#30443)
Added Str::afterLast() and Str::beforeLast() methods (#30507)
Added existsOr() and doesntExistOr() methods to the query builder (#30495)
Added unless condition to Blade custom if directives (#30492)
6.4.x 버전까지는 커스텀 if 지시자를 만들면 아래의 지시자만 사용할 수 있었습니다.
반대의 경우를 확인하려면 아래와 같이 불필요한 코드를 작성해야했는데요.
@env('production')
@else
// production 환경이 아닌 경우 실행할 코드
@endenv
6.5.0 부터는 unless를 이용하여 아래와 같이 할 수 있게 되었습니다.
@unlessenv('production')
// production 환경이 아닌 경우 실행할 코드
@endenv
Before
@includeWhen(! $headless, 'dashboard/partials/nav')
After
@includeUnless($headless, 'dashboard/partials/nav')
PHP 7.4에 타입이 지정된 프로퍼티가 추가됨에 따라, 잡에서의 모델 직렬화가 이를 처리할 수 있게 바뀌었습니다.
냉무.
죄송합니다. Postgres를 아직 안써봐서 뭔 말인지 잘 모르겠어요 ㅠ Postgres에 PostGis가 만들어주는 데이터 타입이 있는데, 이전에는 geometry와 geography를 구분하지 않고 썼었나봐요. 이번에 geography를 구분해서 사용할 수 있다고 하는 것 같습니다.
Postgres는 공간에 대한 데이터 타입도 지원하는구나 싶어 찾아보니 MySQL도 마찬가지로 지원하고 있네요. 이 글의 실험 결과는 공간 정보를 다루는데 있어서는 Postgres가 MySQL보다 10배 더 성능이 좋다고 합니다.
테스트용 가짜 파일을 만들 때 내용을 넣어서 만들 수 있도록 Illuminate\Http\Testing\File
과 Illuminate\Http\Testing\FileFactory
에 createWithContent()
매서드를 추가했다고 합니다. 첫 번째 파라미터로 파일 이름, 두 번째 파라미터로 내용을 넘겨줍니다.
패치 업데이트에 새로운 기능 추가하지 말란 말야 후... 뭐 어쨋든 패치에 안들어갔어도 언젠가는 마이너 업데이트에 추가됐을거니 불평할 건 아니네요 ^^
오늘도 즐거운 하루 되세요!
1일 1식 라라벨 97호
2019년 12월 18일
메쉬 코리아 개발자. 바쁜 팀장님 대신 알려주는 신입 PHP 개발자 안내서를 쓰고, 클린 아키텍처 인 PHP를 번역했습니다. 처음부터 제대로 배우는 라라벨(Laravel Up & Running 2nd Edition)을 번역했습니다.