Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Property [id] does not exist on this collection instance [duplicate]

Tags:

php

laravel

I am trying to create edit page and this error keeps popping up Whoops, looks like something went wrong. Property [id] does not exist on this collection instance. What I've done so far
This is my Route

Route::get('book/edit/{id}', 'BookController@edit')->name('admin.book.edit');
Route::PATCH('book/edit/{id}', 'BookController@update')->name('admin.book.edit');

This is my controller

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

Finally view file have the following in form part

{{ Form::model($books, ['route' => ['admin.book.edit', $books->id], 'class' => 'form-horizontal', 'role' => 'form', 'method' => 'PATCH']) }}
<!--form content-->
{{ Form::close() }}

Any help will be appreciated. Thanks

like image 222
Regolith Avatar asked Apr 10 '17 10:04

Regolith


4 Answers

The error is here:

$books->id

When you're using get() you get a collection and $books is a collection. In this case you need to iterate over it to get its properties:

@foreach ($books as $book)
    {{ $book->id }}
@endforeach
like image 186
Mayank Pandeyz Avatar answered Nov 12 '22 08:11

Mayank Pandeyz


You have to retrieve one record with first() not a collection with get(), i.e:

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

Please sobstitute $books with $book in the rest of the code also.

like image 38
dparoli Avatar answered Nov 12 '22 06:11

dparoli


I too had the similar error where I was using eloquent relationship, and the problem was I was using return $this->hasMany(ClassName::class); But the relation was of One-to-One so the solution for the problem is return $this->hasOne(ClassName::class);.

Here in above sample the first code segment will return array of objects which will be breakdown the flow of eloquent relation in chained eloquent code like $firstChain->middleChain->requiredData

Here if middleChain has arrayOfObjects it cause above error saying property doesn't exist.

Be careful when using eloquent relation to properly mention the type of relation it has

like image 2
Afreed A R Avatar answered Nov 12 '22 08:11

Afreed A R


I think your code need to update like:

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

Hope this work for you!

like image 1
AddWeb Solution Pvt Ltd Avatar answered Nov 12 '22 07:11

AddWeb Solution Pvt Ltd