PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Tuesday, March 1, 2022

[FIXED] Laravel 5: show me the post title that this comment belongs to on user profile

 March 01, 2022     laravel, laravel-5, mysql, php     No comments   

Issue

I am trying to display the post title that user comment belongs to on his profile page.

This is what I'm doing on the user's profile

public function show($user, Post $post)
{
    $user = User::whereName($user)->with('posts.votes')->with('comments')->firstOrFail();
    $comments = $user->comments;
    $linkKarma = User::find($user->id)->votes()->sum('value');
    $commentKarma = User::find($user->id)->commentvotes()->sum('value');
    $total_comments = $user->comments->count();

    $isModerator = false;

    return view('user/profile')->with('user', $user)
                                ->with('linkKarma', $linkKarma)
                                ->with('commentKarma', $commentKarma)
                                ->with('comments', $comments)
                                ->with('total_comments', $total_comments)
                                ->with('isModerator', $isModerator);
}

I am basically getting everything he has, from posts, votes and comments - However, I am not able to show the post that these comments belong to on the user profile page.

I can use $comment->post_id within a foreach() but that will only get me the post ID but I can't use $comment->post->title it will error Trying to get a property of a none object

How can I do that?

My Database

posts: id, title, user_id, subreddit_id...
comments: id, comment, user_id, post_id...
user: id, name, email...

Post Model

public function user() {
    return $this->belongsTo('App\User');
}

public function subreddit() {
    return $this->belongsTo('App\Subreddit');
}

public function votes() {
    return $this->hasMany('App\Vote');
}

public function moderators() {
    return $this->hasMany('App\Moderator');
}

public function comments() {
    return $this->hasMany('App\Comment');
}

Comment Model

public function posts() {
    return $this->belongsTo('App\Post');
}

public function user() {
    return $this->belongsTo('App\User');
}

public function commentvotes() {
    return $this->hasMany('App\CommentVote');
}

public function subreddit() {
    return $this->belongsTo('App\Subreddit');
}

User Model

public function subreddit() {
    return $this->hasMany('App\Subreddit');
}

public function posts() {
    return $this->hasMany('App\Post');
}

public function votes() {
    return $this->hasManyThrough('App\Vote','App\Post');
}

public function commentvotes() {
    return $this->hasManyThrough('App\CommentVote','App\Comment');
}

public function moderators() {
    return $this->hasMany('App\Moderator');
}

public function comments() {
    return $this->hasMany('App\Comment');
}

Solution

Try this:

$comment->posts->title

(notice it is "posts" not "post")

Your Comment model has the function posts so when you access it from the comment, you access it with that function name, as shown above.

I would rename posts to post, as a comment belongs to ONE post, not multiple posts.

Also change

$user = User::whereName($user)->with('posts.votes')->with('comments')->firstOrFail();

to be

$user = User::whereName($user)->with('posts.votes', 'comments.posts')->firstOrFail();


Answered By - Daniel Twigg
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing