首页 > 解决方案 > Laravel - 试图获取非对象的属性“id”

问题描述

我有一个错误:

“试图获取非对象的属性'id'(查看:C:
xampp\htdocs\klikdesaku\resources\views\admin\posts\create.blade.php)”

我在没有 laravel 集体形式的情况下使用它(我不知道它的名字)

例子:{{!! Form::select() !!}}

这是我的代码:

创建.blade.php

@foreach ($categories as $category )
   <option value="{{$category->id}}">{{$category->name}}</option>

PostController.php

public function create(){
        $this->authorize('create', Post::class);
        $categories = Category::pluck('name','id')->all();
        return view ('admin.posts.create', ['categories'=>$categories]);
    }

public function store(){
        $this->authorize('create', Post::class);
        $inputs = request()->validate([
            'title'=>'required',
            'post_image'=>'file', //mime: jpeg, png
            'body'=>'required',
            'category_id'=> 'required'
        ]);
        if(request('post_image')){
            $inputs['post_image'] = request('post_image')->store('images');
        }
        auth()->user()->posts()->create($inputs);
        session()->flash('post-create-message', 'Post was Created ' . $inputs['title']);
        return redirect()->route('post.index');

标签: phplaravellaravel-blade

解决方案


调用时pluck,您正在拉一列“名称”,然后通过键索引该值,在本例中为“id”(第二个参数)。调用all返回的集合时,您将获得底层关联数组。所以你的 'id' 字段是键,类别 'name' 是值:

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

即使你没有打电话all并且你有这个 Collectionpluck仍然可以正常工作。

Laravel 8.x 文档 - 数据库 - 查询生成器 - 检索列值列表 pluck

Laravel 8.x 文档 - 集合 - 可用方法 -all


推荐阅读