此集合实例上不存在属性 [id] [重复]
Posted
技术标签:
【中文标题】此集合实例上不存在属性 [id] [重复]【英文标题】:Property [id] does not exist on this collection instance [duplicate] 【发布时间】:2017-09-05 07:45:45 【问题描述】:我正在尝试创建编辑页面,但此错误不断弹出
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()
任何帮助将不胜感激。谢谢
【问题讨论】:
【参考方案1】:我在使用 eloquent 关系时也有类似的错误,
问题是我使用的是return $this->hasMany(ClassName::class);
但是这种关系是一对一的,所以问题的解决方案是return $this->hasOne(ClassName::class);
。
在上面的示例中,第一个代码段将返回对象数组,这些对象将分解链式 eloquent 代码中的 eloquent 关系流,例如 $firstChain->middleChain->requiredData
这里如果middleChain
有arrayOfObjects 它会导致上面的错误说property doesn't exist
。
在使用 eloquent 关系时要小心正确提及它所具有的关系类型
【讨论】:
【参考方案2】:正如上面提到的 Mayank 所说,您获得了一个集合,您需要遍历 FIELDS 以获得所需的正确字段。我在对我有用的语法中给出了相同的答案
foreach ($books as $book)
$book_id = $book->id
【讨论】:
【参考方案3】:错误在这里:
$books->id
当您使用get()
时,您会得到一个集合,而$books
是一个集合。在这种情况下,您需要对其进行迭代以获取其属性:
@foreach ($books as $book)
$book->id
@endforeach
【讨论】:
【参考方案4】:我认为您的代码需要更新如下:
$books = $this->bookModel
->join('author', 'author.id', '=', 'book.author_id')
->where('book.id', '=', $id)
->select('book.*', 'author.name_1 as authorname1')
->first();
return view('backend.book.edit', compact('books'));
希望这对你有用!
【讨论】:
【参考方案5】:您必须使用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
。
【讨论】:
以上是关于此集合实例上不存在属性 [id] [重复]的主要内容,如果未能解决你的问题,请参考以下文章