find (), findOrFail (), first (), firstOrFail (), get (), list (), toArray ()의 차이점은 무엇입니까?


110

이 방법의 차이점은 무엇입니까?

  1. find()
  2. findOrFail()
  3. first()
  4. firstOrFail()
  5. get()
  6. list()
  7. toArray()

나는 그것들을 사용해 왔고 각각 다른 결과를 제공하며 때로는 내 함수가 배열을 기대하기 때문에 toArray()끝에 추가해야합니다 get(). 다른 방법도 배열을 생성하지 않습니까?



@Joseph Silber의 모든 정보는 정확하고 매우 유용합니다. Laravel 5.2에서 list ()에 대한 답변을 추가하고 싶습니다. Collection, query builder 및 Eloquent 쿼리 작성기 객체의 list 메서드는 pluck으로 이름이 변경되었습니다. 메서드 서명은 동일하게 유지됩니다.
Nirav Bhoi

답변:


233
  1. find($id)ID를 취하고 단일 모델을 반환합니다. 일치하는 모델이 없으면를 반환합니다 null.

  2. findOrFail($id)ID를 취하고 단일 모델을 반환합니다. 일치하는 모델이 없으면 오류 1 이 발생 합니다.

  3. first()데이터베이스에서 찾은 첫 번째 레코드를 반환합니다. 일치하는 모델이 없으면를 반환합니다 null.

  4. firstOrFail()데이터베이스에서 찾은 첫 번째 레코드를 반환합니다. 일치하는 모델이 없으면 오류 1 이 발생 합니다.

  5. get() 쿼리와 일치하는 모델 컬렉션을 반환합니다.

  6. pluck($column)주어진 열에있는 값의 컬렉션 만 반환합니다. 이전 버전의 Laravel에서는이 메서드를 lists.

  7. toArray() 모델 / 컬렉션을 간단한 PHP 배열로 변환합니다.


참고 : 컬렉션 은 강화 된 배열입니다. 배열과 비슷하게 작동하지만 문서 에서 볼 수 있듯이 많은 추가 기능이 있습니다 .

불행히도 PHP는 배열을 사용할 수있는 모든 곳에서 컬렉션 객체를 사용하도록 허용하지 않습니다. 예를 들어, foreach루프 에서 컬렉션을 사용하는 것은 괜찮습니다 array_map. 마찬가지로 인수를으로 입력 힌트하면 arrayPHP는 컬렉션을 전달할 수 없습니다. PHP 7.1부터는 배열과 컬렉션을 모두 받아들이는 데 사용할 수있는 iterabletypehint 가 있습니다.

컬렉션에서 일반 배열을 얻으려면 해당 all()메서드를 호출하십시오 .


1findOrFailfirstOrFail메서드 에서 발생한 오류 는 ModelNotFoundException. 이 예외를 직접 포착하지 않으면 Laravel은 대부분의 시간을 원하는 404로 응답 합니다.


1
정리 해주셔서 감사합니다. 여기에 나는이 같은 게시물의 목록을 얻기 위해 노력하고는 일이 $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이유는 무엇입니까? -
Halnex

subredditmoderators속성 이있는 단일 모델 입니다. moderators단일 모델이 아닌 컬렉션입니다. 당신은 그것에서 직접 어떤 것도 액세스 할 수 없습니다. 당신이 원한다면 당신은 첫 번째를 확인하실 수 있습니다 :$post->subreddit->moderators[0]->user_id
조셉 실버

나는 당신이 "그것이 ModelNotFoundException 예외가 발생합니다"와 "이 오류가 발생합니다"대체해야한다고 생각 : D 어쨌든 크게 기여)
bobbybouwmann

@JosephSilber 완벽 해!
bobbybouwmann
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.