2017-04-10 49 views
3

我想创建编辑页面,但此错误不断弹出 Whoops, looks like something went wrong. Property [id] does not exist on this collection instance. 我所做到目前为止
这是我Route地产[ID]在此集合实例不存在

Route::get('book/edit/{id}', '[email protected]')->name('admin.book.edit'); 
Route::PATCH('book/edit/{id}', '[email protected]')->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() }} 

任何帮助将不胜感激。由于

+0

的可能的复制[Laravel - 物业\ [标题\]不会对这种集合实例存在(http://stackoverflow.com/questions/41366092/laravel-property-title-does-not-exist -on-this-collection-instance) – Thamaraiselvam

回答

7

你必须获取一个纪录first()不是一个集合与get(),即:

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

请sobstitute $books$book在其余的代码也。

0

的错误是在这里:

$books->id 

当你使用get()你会得到一个收集和$books是一个集合。在这种情况下,你需要遍历它来获得属性:

@foreach ($books as $book) 
    {{ $book->id }} 
@endforeach 
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')); 

希望这对你的工作!

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


return view('backend.book.edit', compact('books')); 
+0

我很肯定这并不能解决问题。请添加一些细节来解释您的答案,谢谢。 –

相关问题