用户只能查看和发布用户是“收件人”的帖子。我在下面详细解释了它。
我的桌子结构:
threads
表:user_id
,subject
,recipients
(包含序列化的用户数组)
messages
表:thread_id
,user_id
,body
participants
表:thread_id
,user_id
,read_at
,deleted_at
所以我想要的是一种显示用户是其接收者的所有线程的方法。如果他们删除了线程(每次创建一个线程,每个收件人都会填充参与者表)。例如,如果一个线程有3个收件人,那么将在participants
表中用他们的用户ID创建3行。并且他们可以选择删除线程,以便在查看“属于”它们的所有线程时看不到它。
我不知道如何找到向线程收件人用户显示线程的方法。请帮我解决这个问题。谢谢!
我尝试了以下代码,但没有运气。
$threads = Thread::all();
$participant = Participant::where(['user_id' => uid()])->get();
foreach ($threads as $thread) {
$recipients = unserialize($thread->recipients);
if (in_array(uid(), $recipients) || $thread->user_id == uid()) {
$messages = (object)Participant::where(['user_id' => uid(), 'thread_id' => $thread->id])->paginate(10);
}
}
演示:
已创建一个帖子:
收件人的user_id是:4,7,8。
threads
表:
id | user_id | subject | recipients
-------------------------------------------------------------------
1 | 1 | Hello | a:1:{s:7:"user_id";a:3:{i:0;i:4;i:1;i:7;i:2;i:8;}}
messages
表:
id | user_id | thread_id | body
--------------------------------------------
1 | 1 | 1 | How you doing?
participants
表:
id | user_id | thread_id | read_at
--------------------------------------------
1 | 1 | 1 | 2016-04-13 00:03:23
--------------------------------------------
1 | 4 | 1 | NULL
--------------------------------------------
1 | 7 | 1 | NULL
--------------------------------------------
1 | 8 | 1 | NULL