php - relationships - laravel eloquent get method




A propriedade[title] não existe nesta instância de coleção (4)

Com o método get() , você obtém uma coleção (todos os dados que correspondem à consulta), tente usar first() vez disso, ele retornará apenas um elemento, como este:

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

Estou acompanhando os vídeos de Laracasts: Modelo básico / Controlador / Visualizar fluxo de trabalho .

Eu tenho uma tabela contém informações de contato.

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

Estou tentando passar dados para exibição usando o seguinte código no arquivo do controlador:

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

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

Quando tento mostrar o código como mostrado abaixo,

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

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

Eu recebo o erro que diz:

A propriedade [title] não existe nesta instância de coleção. (Exibição: E: \ laragon \ www \ newsite \ resources \ views \ about.blade.php)

Mas se eu alterar o método de recuperação no arquivo do controlador, ele funcionará.

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

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

Quando eu uso dd($about) no primeiro caso ( where()->get() ), os dados são encapsulados por uma matriz. No segundo caso ( find(3) ), ele exibe os dados conforme o esperado.

O que estou fazendo errado?


Quando você usa get() você obtém uma coleção . Nesse caso, você precisa iterar sobre ele para obter propriedades:

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

Ou você pode simplesmente pegar um dos objetos pelo seu índice:

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

Ou obtenha o primeiro objeto da coleção:

{{ $collection->first() }}

Quando você usa find() ou first() obtém um objeto , para obter propriedades com simples:

{{ $object->title }}

$about->first()->id ou $stm->first()->title e seu problema está resolvido.


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

em vez de get() .

Funciona no meu projeto . Obrigado.







laravel-eloquent