web-dev-qa-db-ja.com

プロパティ[タイトル]はこのコレクションインスタンスに存在しません

私はLaracastsのビデオをフォローしています。 基本モデル/コントローラ/ビューワークフロー

連絡先情報を保持するテーブルがあります。

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'));
}

最初のケース(dd($about))でwhere()->get()を使用すると、データは配列によってカプセル化されます。 2番目のケース(find(3))では、期待通りにデータが表示されます。

何が悪いの?

53
zkanoca

get()を使っているときは、コレクションが得られます。この場合、プロパティを取得するためにそれを繰り返す必要があります。

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

あるいは、インデックスによってオブジェクトの1つを取得することもできます。

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

またはコレクションから最初のオブジェクトを取得する:

{{ $collection->first() }}

find()またはfirst()を使用しているときは、オブジェクトが返されるので、単純なプロパティを取得できます。

{{ $object->title }}
148
Alexey Mezenin

get()メソッドを使用すると、コレクション(クエリに一致するすべてのデータ)を取得できます。代わりにfirst()を使用してみてください。次のように1つの要素のみが返されます。

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

の代わりにget()

私のプロジェクトでも動作します。ありがとう。

1
Phantih

あなたはControllerでCollectionキーワードを使うべきです。ここのような..

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

ここで、Userはリソース名、Profileはモデル名です。ありがとうございました。

1
Pnj Patel