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


99

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))では、期待どおりにデータが表示されます。

私は何が間違っているのですか?

回答:


242

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

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

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

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

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

{{ $collection->first() }}

を使用しているとき、find()またはオブジェクトfirst()を取得しているときは、次のように簡単にプロパティを取得できます。

{{ $object->title }}

はい、Model-> get()を実行した後、1つのオブジェクトを含むリストを取得します。そのため、常にデータが表示され、アクセスできません。exexute後最初の()はオブジェクトを取得
ルベン・ルイス

4
Laravelドキュメントの検索、読み取り、テストを4時間行い、StackOverflowの多くの質問/回答にアクセスした後、get()がコレクションを取得すると述べたのはあなただけでした。私を椅子から飛び降りさせ、私の質問がすべて正しいことに気づかせたのはあなたでした。問題は「印刷」にありました。心より感謝申し上げます。私は本当にそれを意味します!
グリネックス。

23

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、あなたの問題は解決されます。


私のコード提案は、いじくり回しでは機能しますが、プロジェクトでは機能しません。
OnyashEd19年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.