I use laravel 9.x
I am trying to get the count of the Content_hashtag and combine it into the tag,
I have 4 tables like the following:
Chapter
bp_chapter_id,
bp_chapter_name,
Section
bp_section_id,
bp_chapter_id,
bp_tag_id,
Content_hashtag
bp_ch_id,
bp_tag_id,
bp_content_id
Hashtag
bp_tag_id,
bp_hashtag_name
At the model , i have using hasmanythrough like following:
Chapter Model :
public function Tag()
{
return $this->hasManyThrough(Tag::class, Section::class, 'bp_chapter_id','bp_tag_id','bp_chapter_id','bp_tag_id');
}
Controller:
$sections= chapter::with('tag')->get();
And here is the result :
[
{
"bp_chapter_id": 1,
"bp_chapter_name": "test",
"tag": [
{
"bp_tag_id": 62,
"bp_hashtag": "test",
"laravel_through_key": 1
},
]
and this is what i expected at the result:
[
{
"bp_chapter_id": 1,
"bp_chapter_name": "test",
"tag": [
{
"bp_tag_id": 62,
"bp_hashtag": "test",
"laravel_through_key": 1,
**"content_hashtag_count": 0**
},
]
how can i get the expected result
CodePudding user response:
To get the content_hashtag_count field in your result, you can use the withCount method in your Eloquent query.
First, you need to define a relation between the Content_hashtag model and the Tag model. You can do this by adding the following method to the Tag model:
public function contentHashtags()
{
return $this->hasMany(Content_
hashtag::class, 'bp_tag_id',
'bp_tag_id');
}
Then controller looks like that :
$sections =
Chapter::with(['tag' =>
function($query) {
$query-
>withCount('contentHashtags');
}])->get();
This will add a content_hashtags_count field to each Tag record in the result, with the count of Content_hashtag records that belong to that Tag.