私は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)
)では、期待通りにデータが表示されます。
何が悪いの?
get()
を使っているときは、コレクションが得られます。この場合、プロパティを取得するためにそれを繰り返す必要があります。
@foreach ($collection as $object)
{{ $object->title }}
@endforeach
あるいは、インデックスによってオブジェクトの1つを取得することもできます。
{{ $collection[0]->title }}
またはコレクションから最初のオブジェクトを取得する:
{{ $collection->first() }}
find()
またはfirst()
を使用しているときは、オブジェクトが返されるので、単純なプロパティを取得できます。
{{ $object->title }}
get()
メソッドを使用すると、コレクション(クエリに一致するすべてのデータ)を取得できます。代わりにfirst()
を使用してみてください。次のように1つの要素のみが返されます。
$about = Page::where('page', 'about-me')->first();
$about = DB::where('page', 'about-me')->first();
の代わりにget()
。
私のプロジェクトでも動作します。ありがとう。
あなたはControllerでCollectionキーワードを使うべきです。ここのような..
public function ApiView(){
return User::collection(Profile::all());
}
ここで、Userはリソース名、Profileはモデル名です。ありがとうございました。