dimanche 6 mai 2018

How can I get all the users that has commented a post?

I'm working with Laravel 5 and I've the following Models

PostComment.php

class PostComment extends Model
{
    protected $fillable = [
        'post_group_id', 'user_id', 'comment_content'
    ];

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

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

}

PostGroup.php

class PostGroup extends Model
{
    protected $fillable = [
        'group_id', 'user_id', 'post_content'
    ];

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

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

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

Group.php

class Group extends Model
{

    protected $fillable = ([
    'id'
    ]);

    public function users(){
        return $this->belongsToMany(
            'App\User',
            'user_group'
        );
    }

    public function members(){
        return $this->belongsToMany(
           'App\User',
           'user_group'
        )->wherePivot('state','accepted');
    }


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

My web application presents groups, in which you can create posts and in which post you can write comments. In my database I've the following relationships:

  • Group: (id, name, description);
  • PostGroup: (id, group_id, user_id, post_content);
  • PostComment: (id, post_group_id, user_id, comment_content);

What I want to do is to create a collection of User objects, and then make a query to get all users, subscribed to a group, who have commented on a certain post, in MySQL looks like:

select users.* from users, post_comments where users.id = post_comments.user_id and post_comments.post_group_id="1"

So in my controller I've the following code

$theGroup = Group::find($groupId);
$thePost = PostGroup::find($postId);
$memberList = User::where('id', '<>', Auth::user()->id)->whereIn('id', $theGroup->users->pluck('id'))->

So, what I want to do is to extend that query to get the desidered result with ->get()->sortBy('last_name');, how can I exted it after the whereIn?



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire