Laravel 实战开发知乎: 显示未读私信
打赏作者

leec

想问下,计划出文字版的教程吗?

JellyBool 回复 leec

没,精力没有那么多

hard88

群主什么时候更新啊~~~~~

JellyBool 回复 hard88

今天更新,等下上传。。

hard88 回复 JellyBool

好的,辛苦了,加油jelly~

canihelpyou

这个系列还有多少集?

LuoDestiny

Jelly 辛苦了。。。

746019546

这系列结束了吗?

JellyBool 回复 746019546

今天更新,等下上传。。

公司遇到一点麻烦

hard88 回复 JellyBool

好的,辛苦了,加油jelly~

newborn

看完只记得 来一发

GOD_Nt

666,楼主给力

2kpo

这里的逻辑是不是有漏洞,如果判断这个dialog最新一条的消息是自己在question的详情页发送的私信,就会一定判定为已读。

JellyBool 回复 2kpo

如果判断这个dialog最新一条的消息是自己在question的详情页发送的私信,就会一定判定为已读

什么意思?

2kpo 回复 JellyBool

假设A给B发了条私信 B没看 然后B在A提出的问题页面给A发送了私信 那B的inbox页面里A B的dialog不会显示未读吧

JellyBool 回复 2kpo

我知道你的意思了。你是说 $messageGroup->first()->shouldAddUnreadClass() 这个逻辑问题吧。

我看了之后好像是这样的,你可以这样:判断 $messageGroup 里面是否包含 unread 的 message 就好一点

2kpo 回复 JellyBool

是的 还是要去判断$messageGroup要好一点

2kpo 回复 JellyBool

那我直接写在模板中判断好吗

JellyBool 回复 2kpo

可以直接做一个新的类处理这些也可以,messageGroup 作为参数就好

2kpo 回复 JellyBool

能具体说说应该怎么来写吗

JellyBool 回复 2kpo

比如说有一个 MessageStatus 类,里面定义个静态方法 unread() :

public static function unread($messages) {
  // 逻辑
}
lenglvse 回复 JellyBool
    public function shouldAddUnreadClass()
    {
//        if (user()->id === $this->from_user_id){
//            return false;
//        }
        return $this->unread();
    }
lenglvse 回复 JellyBool

这样不行吗 ?

carsonlius 回复 lenglvse

为什么不考虑一下在分组得到原始数据之后再进行处理呢?

    /**
     * 登陆用户收到的私信
     * @return mixed
     */
    public function getMessageList()
    {
        $user_id = \Auth::id();
        $list_messages = Message::where(compact('user_id'))
            ->with(['friendUser' => function ($query) {
                $query->select(['name', 'id', 'avatar']);
            }])
            ->orderBy('id', 'desc')
            ->get()
            ->groupBy('friend_id');

        // 为私信列表整理数据
        return $this->tidyMessageForList($list_messages);
    }

    /**
     *  为私信列表整理数据
     * @param array $list_messages
     * @return mixed
     */
    protected function tidyMessageForList($list_messages)
    {
        return  $list_messages->map(function ($item) {
            // 获取最新的一条信息
            $item_group = $item->first();

            // 当前数据中是否需要添加unread的类
            $item_group->unread_class = $this->unreadClass($item);
            return $item_group;
        });
    }
    
    /**
     * 当前数据中是否需要添加unread的类
     * @param array $item_messages
     * @return boolean
     */
    protected function unreadClass($item_messages)
    {
        $unread_class = false;
        $item_messages->each(function ($item) use (&$unread_class) {
            if ($item->user_id != $item->from_user_id && $item->is_read === 'F') {
                $unread_class = true;
                return false;
            }
        });

        return $unread_class;
    }