2016-12-28 27 views
23

我正在關注Laracasts的視頻:Basic Model/Controller/View Workflow此收藏實例上不存在該物業[標題]

我有一張桌子上有聯繫信息。

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 

我得到錯誤說:

Property [title] does no t存在於此收集實例中。 (查看:E:\ laragon \ www \ newsite \ resources \ views \ about.blade.php)

但是,如果我更改控制器文件中的檢索方法,它的工作原理。

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

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

當我在第一種情況下(where()->get())的數據被由陣列封裝使用dd($about)。在第二種情況下(find(3))它按預期顯示數據。

我在做什麼錯了?

回答

68

當您使用get()時,您會收到一個集合。在這種情況下,你需要遍歷它來獲得屬性:

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

或者你可以得到一個對象通過它的指數:

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

或者從集合獲得第一個對象:

{{ $collection->first() }} 

當您使用find()first()時,您將得到一個對象,因此您可以使用簡單的屬性:

{{ $object->title }} 
0

隨着get()方法你得到一個集合(與查詢匹配的所有數據),嘗試使用first()相反,它返回只有一個元素,像這樣:

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