2017-07-30 91 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将得到该索引的名称列值的数据

相关问题