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.