이 컬렉션 인스턴스에 [title] 속성이 없습니다.


95

나는 Laracasts의 비디오를 따르고 있습니다 : Basic Model / Controller / View Workflow .

연락처 정보를 담은 테이블이 있습니다.

CREATE TABLE `about` (
`id` int(10) UNSIGNED NOT NULL,
`title` varchar(500) COLLATE utf8_unicode_ci NOT NULL,
`content` text COLLATE utf8_unicode_ci,
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

컨트롤러 파일에서 다음 코드를 사용하여 볼 데이터를 전달하려고합니다.

public function index()
{
    $about = Page::where('page', 'about-me')->get(); //id = 3

    return view('about', compact('about'));
}

아래와 같이 코드를 보여 주려고하면

@section('title')
    {{$about->title}}
@stop

@section('content')
    {!! $about->content !!}
@stop

다음과 같은 오류가 발생합니다.

이 컬렉션 인스턴스에 [title] 속성이 없습니다. (보기 : E : \ laragon \ www \ newsite \ resources \ views \ about.blade.php)

그러나 컨트롤러 파일에서 검색 방법을 변경하면 작동합니다.

public function index()
{
    $about = Page::find(3);

    return view('about', compact('about'));
}

I 사용할 때 dd($about)첫 번째 경우에 ( where()->get())를 데이터 어레이에 의해 캡슐화된다. 두 번째 경우 ( find(3))는 예상대로 데이터를 표시합니다.

내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변:


233

사용할 때 컬렉션get() 을 얻을 수 있습니다 . 이 경우 속성을 가져 오기 위해 반복해야합니다.

@foreach ($collection as $object)
    {{ $object->title }}
@endforeach

또는 인덱스로 객체 중 하나를 얻을 수 있습니다.

{{ $collection[0]->title }}

또는 컬렉션에서 첫 번째 개체를 가져옵니다.

{{ $collection->first() }}

사용 중이 find()거나 객체first() 를 얻을 때 다음 과 같이 간단하게 속성을 얻을 수 있습니다.

{{ $object->title }}

예, Model-> get () 실행 후 하나의 객체로 목록을 얻습니다. 그 이유 때문에 항상 데이터를 표시하고 액세스 할 수 없습니다. exexute 후 첫 번째 () 다음 개체를 얻을
루벤 Ruíz라는

2
4 시간 동안 Laravel 문서를 검색하고 읽고 테스트 한 후 많은 StackOverflow 질문 / 답변을 방문한 후 get ()이 컬렉션을 검색한다고 언급 한 유일한 사람이되었습니다. 나를 의자에서 뛰어 내려 내 모든 질문이 정확하다는 것을 깨닫게 한 것은 바로 당신이었습니다. 문제는 "인쇄물"에있었습니다. 이 답변에 진심으로 감사드립니다! 정말 진심이다!
Grinnex.

22

get()메서드를 사용하면 컬렉션 (쿼리와 일치하는 모든 데이터)을 first()가져오고 대신 사용하려고 시도 하면 다음과 같이 하나의 요소 만 반환됩니다.

 $about = Page::where('page', 'about-me')->first();

2
$about = DB::where('page', 'about-me')->first(); 

대신 get() .

내 프로젝트에서 작동합니다 . 감사.


3
이것은 저자의 질문에 답할 수 있지만 설명하는 단어 및 / 또는 문서에 대한 링크가 부족합니다. 원시 코드 조각은 주변에 문구가 없으면 그다지 도움이되지 않습니다. 좋은 답변을 작성하는 방법이 매우 도움 이 될 수도 있습니다. 제발 편집 답변을 - 검토에서

1

Controller에서 Collection 키워드를 사용해야합니다. 여기처럼 ..

public function ApiView(){
    return User::collection(Profile::all());
}

여기서 사용자는 리소스 이름이고 프로필은 모델 이름입니다. 감사합니다.


1

사람이 공장 함수로 작업하는 동안 이것을 얻을 수 있으므로 이것이 유효한 구문인지 확인할 수 있습니다.

$user = factory(User::class, 1)->create()->first();

다음과 같은 작업을 수행하면 컬렉션 인스턴스 오류가 표시 될 수 있습니다.

$user = factory(User::class, 1)->create()->id;

그래서 다음과 같이 변경하십시오.

$user = factory(User::class, 1)->create()->first()->id;

0

$about->first()->id또는 $stm->first()->title문제가 해결되었습니다.


내 코드 제안은 팅커에서는 작동하지만 프로젝트에서는 작동하지 않습니다.
Onyash Ed 2019 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.