Свойство [id] не существует для данного экземпляра коллекции

Я пытаюсь создать страницу редактирования, и постоянно выскакивает эта ошибка Упс, похоже, что-то пошло не так. Свойство [id] не существует для этого экземпляра коллекции. Что я сделал на данный момент
Вот мой маршрут

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() }}

Любая помощь будет оценена по достоинству. Спасибо

Решение

Вы должны получить одну запись с помощью 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 в остальной части кода.

Комментарии (0)

Ошибка здесь:

$books->id

Когда вы используете get(), вы получаете коллекцию, а $books - это коллекция. В этом случае вам нужно выполнить итерацию над ней, чтобы получить ее свойства:

@foreach ($books as $book)
    {{ $book->id }}
@endforeach
Комментарии (0)

Я думаю, что ваш код должен быть обновлен как:

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

Надеюсь, это сработает!

Комментарии (0)