此集合实例上不存在属性 [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-&gt;hasMany(ClassName::class); 但是这种关系是一对一的,所以问题的解决方案是return $this-&gt;hasOne(ClassName::class);

在上面的示例中,第一个代码段将返回对象数组,这些对象将分解链式 eloquent 代码中的 eloquent 关系流,例如 $firstChain-&gt;middleChain-&gt;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] [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 8 Seeders:此集合实例上不存在属性 [id]

“此集合实例上不存在属性 [id]”但代码正确吗?

此集合实例上不存在异常属性 []

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

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

此集合实例上不存在异常属性 [图像]