이 방법의 차이점은 무엇입니까?
find()
findOrFail()
first()
firstOrFail()
get()
list()
toArray()
나는 그것들을 사용해 왔고 각각 다른 결과를 제공하며 때로는 내 함수가 배열을 기대하기 때문에 toArray()
끝에 추가해야합니다 get()
. 다른 방법도 배열을 생성하지 않습니까?
이 방법의 차이점은 무엇입니까?
find()
findOrFail()
first()
firstOrFail()
get()
list()
toArray()
나는 그것들을 사용해 왔고 각각 다른 결과를 제공하며 때로는 내 함수가 배열을 기대하기 때문에 toArray()
끝에 추가해야합니다 get()
. 다른 방법도 배열을 생성하지 않습니까?
답변:
find($id)
ID를 취하고 단일 모델을 반환합니다. 일치하는 모델이 없으면를 반환합니다 null
.
findOrFail($id)
ID를 취하고 단일 모델을 반환합니다. 일치하는 모델이 없으면 오류 1 이 발생 합니다.
first()
데이터베이스에서 찾은 첫 번째 레코드를 반환합니다. 일치하는 모델이 없으면를 반환합니다 null
.
firstOrFail()
데이터베이스에서 찾은 첫 번째 레코드를 반환합니다. 일치하는 모델이 없으면 오류 1 이 발생 합니다.
get()
쿼리와 일치하는 모델 컬렉션을 반환합니다.
pluck($column)
주어진 열에있는 값의 컬렉션 만 반환합니다. 이전 버전의 Laravel에서는이 메서드를 lists
.
toArray()
모델 / 컬렉션을 간단한 PHP 배열로 변환합니다.
참고 : 컬렉션 은 강화 된 배열입니다. 배열과 비슷하게 작동하지만 문서 에서 볼 수 있듯이 많은 추가 기능이 있습니다 .
불행히도 PHP는 배열을 사용할 수있는 모든 곳에서 컬렉션 객체를 사용하도록 허용하지 않습니다. 예를 들어, foreach
루프 에서 컬렉션을 사용하는 것은 괜찮습니다 array_map
. 마찬가지로 인수를으로 입력 힌트하면 array
PHP는 컬렉션을 전달할 수 없습니다. PHP 7.1부터는 배열과 컬렉션을 모두 받아들이는 데 사용할 수있는 iterable
typehint 가 있습니다.
컬렉션에서 일반 배열을 얻으려면 해당 all()
메서드를 호출하십시오 .
1findOrFail
및 firstOrFail
메서드 에서 발생한 오류 는 ModelNotFoundException
. 이 예외를 직접 포착하지 않으면 Laravel은 대부분의 시간을 원하는 404로 응답 합니다.
$post = Post::with('user.votes')->with('subreddit.moderators')->findOrFail($post->id);
내가 액세스 할 수 있도록 $post->subreddit->moderators->user_id
하지만주고있다 Undefined property: Illuminate\Database\Eloquent\Collection::$user_id
- 나는 액세스 할 수 있습니다 $post->subreddit->moderators
내가 추가 할 때이 아닌 user_id
이유는 무엇입니까? -
subreddit
moderators
속성 이있는 단일 모델 입니다. moderators
단일 모델이 아닌 컬렉션입니다. 당신은 그것에서 직접 어떤 것도 액세스 할 수 없습니다. 당신이 원한다면 당신은 첫 번째를 확인하실 수 있습니다 :$post->subreddit->moderators[0]->user_id