试图使用laravel获取非对象的属性“ catid”

时间:2018-08-18 08:04:04

标签: laravel

这是我的代码

public function edit($id) {
    $categories = Category::all();
    $category = Category::find($id);
    return view('categories.edit', compact('categories', 'category'));

}

以下是我的编辑表单

{!! Form::open(['url' => ['categories', $category->catid], 'method' => 'put']) !!}
    <div class="form-group padding-t-20 {{ $errors->has('name') ? 'has-error' : '' }}">
        {{ Form::label('name', 'Name') }}
        {{ Form::text('name', $category->name, ['class' => 'form-control', 'placeholder' => 'Category']) }}
        <span class="text-danger">{{ $errors->has('name') ? $errors->first('name') : '' }}</span>
    </div>
    <div class="text-center padding-t-20">
            {{ Form::submit('Update', ['class' => 'btn btn-info btn-fill btn-wd']) }}
    </div>
{!! Form::close() !!}

它工作正常,但是当我使用如下所示的DB Facade

 public function edit($id) {
        $categories = DB::select('select * from tbl_menu_category');
        $category = DB::select('select * from tbl_menu_category where catid = ?', [$id]);
        return view('categories.edit', compact('categories', 'category'));
}

它给我一个错误,试图获取非对象的属性“ catid”

4 个答案:

答案 0 :(得分:1)

执行查询

public function edit($id) {
        $categories = DB::table('tbl_menu_category')->get();  <--here
        $category = DB::table('tbl_menu_category')->where('catid', $id)->first(); <-- here
        return view('categories.edit', compact('categories', 'category'));
}

答案 1 :(得分:1)

使用DB :: select()查询数据库时,即使您尝试仅从数据库中获取记录,它也会以数组形式返回结果。

因此解决方案是:

public function edit($id) {
  $categories = DB::select('select * from tbl_menu_category');
  $category = DB::select('select * from tbl_menu_category where catid = ?', [$id])[0]; <--- grab the first index of the array returned.
  return view('categories.edit', compact('categories', 'category'));
}

希望它会有所帮助:)

答案 2 :(得分:1)

$category = DB::table('tbl_menu_category')->where('catid',$id)->first();试试这个...

这对您有帮助吗?请给我评分...

答案 3 :(得分:0)

如果您不知道传入数据的类型,则optional()方法最适合这些情况。

optional($category)->catid
  

完成查询后,也不要忘记获取结果。   可以对单个结果使用first()方法,对多个结果使用get()   结果

public function edit($id) {
        $categories = DB::select('select * from tbl_menu_category')->get();
        $category = DB::select('select * from tbl_menu_category where catid = ?', [$id])->first();
        return view('categories.edit', compact('categories', 'category'));
}

我也不得不说,Eloquant是高级orm,因此您不必直接编写sql。您可以使用QueryBuilder方法,使您的查询更具可读性。

public function edit($id) {
        $categories = DB::table('tbl_menu_category')->get();
        $category = DB::table('tbl_menu_category')->where(catid,$id)->first();
        return view('categories.edit', compact('categories', 'category'));
}