Domanda

I am following a tutorial on Laravel 4 but I am stuck at a specific point. I want to return a view showing the user with his photos. For this I have the following method in my controller:

    public function show($id)
{
    $user = User::whereId($id)->with('photo')->first();

    return View::make('authenticated.users.show', compact('user'));
}

If I return $user the json I am seeing in the browser seems to be perfectly correct.

However, if I try to display that in the show.blade.php view I am getting this error:

Undefined property: Illuminate\Database\Eloquent\Collection::$id

The code I am using in my view is the following:

 <li>{{ $user->photo->id }}</li>

Its exactly as shown in the tutorial but it does not work out.

I would very much appreciate some help.

Thanks.

È stato utile?

Soluzione

It's most like that you are using the hasMany relationship in your User model. When using the hasMany relationship, it will return a Collection object, rather than your model itself. Take a look at the API for the Collection object and you'll find many helpful methods.

What you should probably do is something like this.

foreach ($user->photo->all() as $photo)
{
    echo $photo;
}

Or, if your user only has one photo, then change your relationship in the User model to hasOne. Then you can use it as you are now.

echo $user->photo;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top