此集合实例上不存在Property [id]

时间:2017-04-10 10:01:45

标签: php laravel

我正在尝试创建编辑页面,此错误不断弹出 print-optimal 到目前为止我做了什么 这是我的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));

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

5 个答案:

答案 0 :(得分:16)

您必须使用<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_${scala.major.minor.version}</artifactId> <version>${spark.version}</version> </dependency> 检索一条记录而不是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

答案 1 :(得分:1)

错误在于:

$books->id

当您使用get()时,您会收到一个集合,而$books是一个集合。在这种情况下,您需要迭代它以获取其属性:

@foreach ($books as $book)
    {{ $book->id }}
@endforeach

答案 2 :(得分:1)

我认为您的代码需要更新如下:

$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'));

希望这对你有用!

答案 3 :(得分:1)

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

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

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

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

答案 4 :(得分:0)

就像上面提到的Mayank一样,您可以获得一个收藏集,因此您渴望遍历FIELDS以获得所需的正确字段。我在对我有用的语法中给出了相同的答案

foreach ($books as $book) {
     $book_id = $book->id
}