此集合实例上不存在属性 \[id\]

新手上路,请多包涵

我正在尝试创建编辑页面并且这个错误不断弹出 Whoops, looks like something went wrong. Property [id] does not exist on this collection instance. 我到目前为止所做的

这是我的 Route

 Route::get('book/edit/{id}', 'BookController@edit')->name('admin.book.edit');
Route::PATCH('book/edit/{id}', 'BookController@update')->name('admin.book.edit');

这是我的控制器

$books = $this->bookModel
        ->join('author', 'author.id', '=', 'book.author_id')
        ->where('book.id', '=', $id)
        ->select('book.*', 'author.name_1 as authorname1')
        ->get();
    return view('backend.book.edit', compact('books', $books));

最后查看文件在表单部分有以下内容

{{ Form::model($books, ['route' => ['admin.book.edit', $books->id], 'class' => 'form-horizontal', 'role' => 'form', 'method' => 'PATCH']) }}
<!--form content-->
{{ Form::close() }}

任何帮助将不胜感激。谢谢

原文由 Regolith 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 586
2 个回答

您必须使用 first() get() 集合检索一条记录,即:

 $book = $this->bookModel
    ->join('author', 'author.id', '=', 'book.author_id')
    ->where('book.id', '=', $id)
    ->select('book.*', 'author.name_1 as authorname1')
    ->first();

请在其余代码中将 $books 替换为 $book

原文由 dparoli 发布,翻译遵循 CC BY-SA 3.0 许可协议

我在使用 eloquent 关系时也遇到了类似的错误,问题是我使用的是 return $this->hasMany(ClassName::class); 但关系是一对一的,所以问题的解决方案是 return $this->hasOne(ClassName::class);

在上面的示例中,第一个代码段将返回对象数组,这些对象将分解链式 eloquent 代码中的 eloquent 关系流,例如 $firstChain->middleChain->requiredData

在这里,如果 middleChain 有 arrayOfObjects 它会导致上述错误说 property doesn't exist

使用 eloquent 关系时要小心正确提及它所具有的关系类型

原文由 Afreed A R 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题