【问题标题】:Laravel - Trying to get property 'id' of non-objectLaravel - 试图获取非对象的属性“id”
【发布时间】:2021-05-26 11:50:03
【问题描述】:

我有一个错误:

“试图获取非对象的属性'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');

【问题讨论】:

  • 我认为删除 ->all() 可以解决问题。如果它没有在您的视图中尝试 @dd($categories)。它会显示 $categories 的结构
  • Form:select 至少需要两个参数,如果您传递这些参数,则不需要循环以生成选项
  • 删除-&gt;all() 也不起作用....我尝试使用@dd($categories),但它只以简单的形式显示标题和类别..
  • @apokryfos:我没有使用Form:select,但我使用&lt;select&gt;&lt;option&gt;&lt;\option&gt;&lt;\select&gt;...如果我想使用下拉菜单(类别数据库)创建帖子.. 在 PostController 中,我是什么在做什么?

标签: php laravel laravel-blade


【解决方案1】:

当调用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 Valuespluck

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

【讨论】:

  • 感谢您的帮助.. 它可以工作并保存到数据库
【解决方案2】:
  public function create(){

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

【讨论】:

  • 请添加一些关于您的解决方案如何解决问题的说明。
猜你喜欢
  • 2020-06-26
  • 2018-07-03
  • 1970-01-01
  • 2019-03-27
  • 2020-10-21
  • 2020-05-04
  • 1970-01-01
  • 2021-03-27
  • 1970-01-01
相关资源
最近更新 更多