Я работаю с Laravel 5 и у меня есть следующие модели
Group.php
class Group extends Model
{
protected $fillable = ([
'id'
]);
public function users(){
return $this->belongsToMany(
'App\User',
'user_group'
);
}
public function posted(){
return $this->hasMany(
'App\PostGroup'
);
}
}
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'
);
}
}
PostComment.php
class PostComment extends Model
{
protected $fillable = [
'post_id', 'user_id', 'comment_content'
];
public function post(){
return $this->belongsTo('App\PostGroup');
}
public function user(){
return $this->belongsTo('App\User');
}
}
Контекстуально мое веб-приложение представляет groups
, в котором вы можете создать posts
и в какой пост вы можете написать comments
. Итак, у меня есть следующие отношения в моей базе данных:
- Группа: (идентификатор, имя, описание);
- PostGroup: (id, group_id, user_id, post_content);
- PostComment: (id, post_id, user_id, comment_content);
Что я хочу сделать, это , чтобы создать список объектов PostComment, а затем сделать запрос , чтобы получить все комментарии всех сообщений группы , в MySQL выглядит как:
SELECT post_comment.* FROM post_comment,post_group WHERE post_comment.post_id = post_group.id AND post_groups.group_id = 1;
Теперь, например, в Laravel, если я хочу получить все сообщения группы, у меня есть следующая строка кода:
$postList = Group::find($id)->posted->sortByDesc('created_at');
Где posted
- функция в Групповой модальности. Я пытался сделать что-то вроде
$commentList = PostGroup::where('group_id', $id)->commented;
Но это не работает, как я могу решить?
EDIT
GroupController.php
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
// Replace with shares of publication-group-model
$authUser = Auth::user();
$sharesList = Group::find($id)->shares->sortByDesc('created_at');
$groupList = $authUser->groupsAsMember->where('id', '<>', $id);
$group = $authUser->groups->find($id);
$postList = Group::find($id)->posted->sortByDesc('created_at');
$postsGroups = PostGroup::where('group_id', $id)->with('commented')->get();
//dd($postsGroups);
foreach ($postsGroups as $postGroup) {
$commentsList = $postGroup->commented;
}
//dd($commentsList);
return view('Pages.Group.detail', ['sharesList' => $sharesList, 'groupList' => $groupList, 'theGroup' => $group, 'postList' => $postList, 'commentsList' => $commentsList]);
}