------ ADDED -------
It looks like a bulletin board.
Users can create "channels" and
You can enter "Channel" and write "Post"
From here.
The "channel" I created is
It will be entered into the channels model
When I join a "channel" created by someone else, I enter the channels_joins model.
Simply
in the channel model
Information such as channel name, creator, etc.
Channel joins model contains only channel_id and user_id, and each id is connected with a foreigner key.
I combine the "channels" I created and the "channels" I subscribed to in the view and show them as a list
The code is below
$joins = $this->channelJoins()
->join('channels', 'channel_joins.channel_id', '=', 'channels.id')
->get();
$channels = $this->channels()
->leftJoin('channel_joins', 'channels.id', '=', 'channel_joins.channel_id')
->select('channels.*', 'channel_joins.channel_id', 'channel_joins.user_id')
->get();
$vals = collect($joins)->merge($channels);
I need to iterate over the list in the view and show two data.
- Show channel name
- Number of people who are subscribed to the channel
Here's why I'm stuck
When checked with dd(), $list consists of one collection, and there are two models "App\Models\Channels" and "App\Models\Channel_joins" in it.
In the case of a channel model, the channel name is not a problem, but the problem is to print the number of people who are subscribed.
In case of channel joins model, it is a problem to output the channel name.
I
@forelse ($posts as $list)
<tr>
<td>
<div class="p-1 ml-1">
<a href="{{ route('channel.show', $list->id) }}">{{ $list->name }}</a>
<p class="float-right">
Count:
<span class="total">
{{-- {{ dd($list) }}--}}
{{ ($list->count('user_id')) }}
</span>
EA
</p>
</div>
</td>
</tr>
@endforeach
------ ADDED ---------
Here is
Channels Table
Channel Joins Table
Users Table
Thanks for reply
I have one channel called a, but in the picture, it is output as two.
In addition, the number of people who are subscribed to channel a is 2, and the other channels have 0-1 people. In the picture, the wrong value is exposed.
how to modify my query to right way ?
My Answer:
posts and comments on the bulletin board._Posts can have multiple comments._Each post and comment has a user_id to indicate who created it._We have two collections:_1. posts collection with fields: post_id, user_id, content_2. comments collection with fields: comment_id, post_id, user_id, content_We want to merge these two collections and get a new collection with the following fields:_- post_id- user_id (of the post creator)- content (of the post)- comments (an array of comments with fields: comment_id, user_id (of the comment creator), content)_Here's the PHP code to achieve this:_
php $post['post_id'], 'user_id' => $post['user_id'], 'content' => $post['content'], 'comments' => [] ]; foreach ($comments as $comment) { if ($comment['post_id'] === $post['post_id']) { $newPost['comments'][] = [ 'comment_id' => $comment['comment_id'], 'user_id' => $comment['user_id'], 'content' => $comment['content'] ]; } } $newCollection[] = $newPost;}print_r($newCollection);?>
This code will merge the posts and comments collections based on the post_id and create a new collection with the desired structure.
Rate this post
5 of 5 based on 6235 votesComments