Я работаю с Laravel 5 и у меня есть следующие модели
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'
);
}
}
Мое веб-приложение представляет groups
, в котором вы можете создать posts
и в каком посте вы можете написать comments
. В моей базе данных есть следующие отношения:
- Группа: (идентификатор, имя, описание);
- PostGroup: (id, group_id, user_id, post_content);
- PostComment: (id, post_group_id, user_id, comment_content);
Я хочу создать коллекцию объектов User, а затем сделать запрос , чтобы получить всех пользователей, подписанных на группу, которые прокомментировали определенный пост в MySQL выглядит так:
select users.* from users, post_comments where users.id = post_comments.user_id and post_comments.post_group_id="1"
Итак, в моем контроллере есть следующий код
$theGroup = Group::find($groupId);
$thePost = PostGroup::find($postId);
$memberList = User::where('id', '<>', Auth::user()->id)->whereIn('id', $theGroup->users->pluck('id'))->
Итак, я хочу расширить этот запрос, чтобы получить желаемый результат, с помощью ->get()->sortBy('last_name');
, как я могу завершить его после whereIn
?
EDIT
User.php
class User extends Authenticatable
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token','created_at','updated_at'
];
public function groups(){
return $this->belongsToMany('App\Group','user_group');
}
public function groupsAsAdmin(){
return $this->belongsToMany('App\Group','user_group')->wherePivot('role','admin');
}
public function groupsAsMember(){
return $this->belongsToMany('App\Group','user_group')->wherePivot('state','accepted');
}
public function groupsAsInvited(){
return $this->belongsToMany('App\Group','user_group')->wherePivot('state','pending');
}
public function posted(){
return $this->hasMany('App\PostGroup');
}
public function commented(){
return $this->hasMany('App\PostComment');
}
}