I have 2 eloquent models set like this:
Forum:
protected $fillable = [
'title',
'description',
'icon_path',
'parent_id',
'display_order',
'forum_is_open',
];
public function mods()
{
return $this->hasMany(ForumModerator::class);
}
ForumModerator:
protected $fillable = [
'forum_id',
'user_id',
];
public function forum()
{
return $this->belongsTo(Forum::class, 'forum_id', 'id');
}
public function user()
{
return $this->belongsTo(User::class, 'user_id', 'id');
}
And I'm getting the list of Forums like this:
return Forum::where('forum_is_open', 1)
->with(['subForums', 'mods.user'])
->orderBy('display_order', 'ASC')
->get();
and this is what the result looks like:
{
"id": 52,
"title": "Quia eius dolorem est sunt.",
"description": "Dolore eveniet unde autem debitis. Natus et error quaerat dolor minima.",
"icon_path": null,
"parent_id": null,
"display_order": 1,
"forum_is_open": 1,
"created_at": "2022-11-23T22:34:45.000000Z",
"updated_at": "2022-11-23T22:34:45.000000Z",
"sub_forums": [],
"mods": [
{
"id": 1,
"forum_id": 52,
"user_id": 3,
"created_at": null,
"updated_at": null,
"user": {
"id": 3,
"username": "Monserrat McCullough",
"email": "billy52@example.org",
"display_name": "Vincenza Lebsack",
"signature": null,
"group_id": 1,
"post_count": 0,
"created_at": "2022-11-25T04:15:12.000000Z",
"updated_at": "2022-11-25T04:15:12.000000Z"
}
},
{
"id": 2,
"forum_id": 52,
"user_id": 16,
"created_at": null,
"updated_at": null,
"user": {
"id": 16,
"username": "Prof. Norberto Kohler Sr.",
"email": "zdach@example.net",
"display_name": "Edmund Hickle",
"signature": null,
"group_id": 1,
"post_count": 0,
"created_at": "2022-11-25T04:15:12.000000Z",
"updated_at": "2022-11-25T04:15:12.000000Z"
}
}
]
},
I'm trying to get the list of mods for each Forum that has a mod, but without the entire ForumModerator record. bascically just want the user object to be in the mods array.
How do I need to set the relation between Forum and ForumModerator models to achive that?
Thanks
looked into hasManyThrough()
function but wasn't able to achive the desired outcome
The easiest way is to probably set up a many-to-many relationship between the Forum
and the User
models using the forum_moderators
table:
class Forum extends Model
{
public function users()
{
return $this->belongsToMany(User::class, 'forum_moderators');
}
}
Then you can simply eager load the users
relationship.
Alternatively, you can always modify your response using API Resources.