chebaby
chebaby

Reputation: 7740

posts and attachments, Undefined property: Illuminate\Database\Eloquent\Collection::$name

when i try to get the attachment's name like this:

{{$post->attachments->name}}

i get the following error

Undefined property: Illuminate\Database\Eloquent\Collection::$name (View: C:\wamp\www\Sites\app\views\public\categories\show.blade.php)

Post model

class Post extends \Eloquent implements SluggableInterface {

    public function category(){
        return $this->belongsTo('Category');
    }

    public function attachments(){
        return $this->hasMany('Attachment');
    }

}

Attachment Model

class Attachment extends \Eloquent {

    protected $fillable = ['name', 'type', 'extension', 'user_id', 'post_id', 'size'];


    public function post(){
        return $this->belongsTo('Post');
    }
}

CategoriesController

class CategoriesController extends \BaseController {

    public function show($id, $slug = null)
    {

        $category = Category::find($id);

        $posts = Post::whereCategoryId($category->id)->orderBy('date', 'DESC')->paginate(4);

        return View::make('public.categories.show', compact('category', 'posts'));
    }

}

categorie View

@foreach($posts as $post)
   {{$post->title}} // work fine
   {{$post->body}} // work fine

   {{$post->attachments}} // return this :
       [
         {
            "id":14,
            "name":"29-01-2015-134",
            "type":"image\/jpeg",
            "extension":"jpg",
            "created_at":"2015-01-29 13:04:35",
            "updated_at":"2015-01-29 13:04:35",
            "user_id":1,
            "post_id":134,
            "size":136130
         }
       ]
@endforeach

any ideas?!!!

Upvotes: -1

Views: 4676

Answers (1)

lukasgeiter
lukasgeiter

Reputation: 152900

According to your relationship definition there can be many attachments, that means the relation will return a collection of models. You can either get only the first one:

@if($attachment = $post->attachments()->first())
   {{ $attachment->name }}
@endif

Or loop over all attachments

@foreach($post->attachments as $attachment)
    {{ $attachment->name }}
@endforeach

Upvotes: 2

Related Questions