Laravel Pluck - 试图获得非对象的属性

时间:2017-07-30 13:29:55

标签: php laravel

我需要选择id和name字段,将集合传递给视图并迭代它以生成select的选项。但是,我收到以下错误:

  

尝试获取非对象的属性   (查看:../ resources / views / lalayout / app.blade.php)   (查看:../ 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

4 个答案:

答案 0 :(得分: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 :(得分:2)

您正在使用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 :(得分:1)

试试这个。

这将为您提供迭代所需的集合。

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

答案 3 :(得分:0)

查看

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

现在为什么我们需要这样做。如果你打印你的对象dd($ propertyTypes-&gt; tooArray());像这样你会看到一个包含id列值作为数组索引的数组。所以要获得这个值你需要将索引值存储在某处,在foreach期间我使用$ id =&gt; $ name所以$ id将获得索引值,$ name将获取该索引的数据,即名称列值