2017-07-30 40 views
0

我需要選擇ID和名稱字段,將集合傳遞給視圖並迭代它以生成選擇的選項。不過,我收到以下錯誤:Laravel Pluck - 試圖獲取非對象的屬性

Trying to get property of non-object (View: ../resources/views/layouts/app.blade.php) (View: ../resources/views/layouts/app.blade.php)

控制器

public function index() 
{ 
    $propertyTypes = PropertyType::pluck('name', 'id'); 
    return view('home', compact('propertyTypes')); 
} 

查看

@foreach($propertyTypes as $propertyType) 
    <option value="{{ $propertyType->id }}"> 
     {{ $propertyType->name }} 
    </option> 
@endforeach 

ID Name 
1 Detached 
2 Semi-detached 
3 Terraced 
4 Flat 
5 Bungalow 
6 Land 
7 Park Home 
+2

You '需要'@foreach($ propertyTypes作爲$ id => $ name)'' – Perry

回答

0

您使用的是pluck方法得到的結果爲key-value對,但在你看來你要訪問的值,這是造成這個錯誤的對象。

要麼將​​結果作爲模型提取,要麼必須更新視圖。

選項1:抓取結果爲榜樣

public function index() 
{ 
    $propertyTypes = PropertyType::select('name', 'id')->get(); 
    return view('home', compact('propertyTypes')); 
} 

選項2:遍歷集合作爲鍵值

@foreach($propertyTypes as $id => $name) 
    <option value="{{ $id }}"> 
     {{ $name }} 
    </option> 
@endforeach 
2

儘量只:

public function index() 
{ 
    $propertyTypes = PropertyType::pluck('name', 'id'); 
    return view('home', ['propertyTypes' => $propertyTypes]); 
} 

如果不工作,你必須檢查你的view例如:

views/ControllerName/blog/index.blade.php

存在此blade與否?

因爲你stack traceresources/views/layouts/app.blade.php

1

寫試試這個。

這將爲您提供所需的集合來迭代。

public function index() 
{ 
    $propertyTypes = PropertyType::select('name', 'id')->get(); 
    return view('home', compact('propertyTypes')); 
} 
0

查看

@foreach($propertyTypes as $id => $name) 
    <option value="{{ $id }}"> 
     {{ $name }} 
    </option> 
@endforeach 

現在我們爲什麼需要這樣做。如果你打印你的對象dd($ propertyTypes-> tooArray());像這樣你會看到一個包含id列值的數組作爲數組索引。所以要獲得這個值,你需要在某處存儲索引值,在使用$ id => $ name的foreach期間,所以$ id將得到索引值,$ name將得到該索引的名稱列值的數據

相關問題