微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel - 试图获取非对象的属性“id”

如何解决Laravel - 试图获取非对象的属性“id”

我有一个错误

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

我用过没有laravel集体形式(我不知道它的名字)

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

这是我的代码

create.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');

解决方法

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

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

即使您没有调用 all 并且您拥有来自 pluck 的集合,这仍然可以正常工作。

Laravel 8.x Docs - Database - Query Builder - Retrieving A List Of Column Values pluck

Laravel 8.x Docs - Collections - Available Methods - all

,
  public function create(){

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。