Laravel 实战开发知乎: 私信列表 Part 2
打赏作者

thirdriver

前排支持_

JellyBool 回复 thirdriver

哈哈哈,我下午再上传一个。

xshaitt

好像这样如果互相都发送了的话,循环会把同一个对话分成两部分显示

carsonlius 回复 xshaitt

的确是这样

carsonlius 回复 xshaitt

楼下有解决方案

newborn

查询的时候 用Message::where(‘to_user_id’,’’)->orWhere(‘form_user_id’,’’)->get();
这样是不是就可以得到 a发送给别人,别人发送给a的所有信息了

JellyBool 回复 newborn

嗯哼,你可以打印出来看看

liwei19911991

请问我用了ide_helper这个文件,为什么我的=\App\User::find(1);find方法还是提示找不到呢,还有好多方法也是找不到,谢谢

JellyBool 回复 liwei19911991

你的 laravel 版本和 phpstorm 的版本是多少?怎么拿到的 ide_helper 的文件

liwei19911991 回复 JellyBool

Laravel Framework 5.4.19

PhpStorm 2016.3.3
Build #PS-163.13906.21, built on March 8, 2017
Licensed to hanhanfilm.com

JRE: 1.8.0_112-release-408-b6 x86
JVM: OpenJDK Server VM by JetBrains s.r.o

ide_helper 文件
https://gist.github.com/barryvdh/5227822

后台通过composer require barryvdh/laravel-ide-helper生成的也还是认不出来很多方法例如\App\User::find(1),但是也能解决一部分其他的方法

JellyBool 回复 liwei19911991

直接下载这个文件

https://gist.githubusercontent.com/barryvdh/5227822/raw/2c73039cd2b11c2f90f22e829de0231dd3733d62/_ide_helper.php

文件的名字就是 _ide_helper.php ,不用 composer require barryvdh/laravel-ide-helper

liwei19911991 回复 JellyBool

我知道 我的意思是我通过直接下载和 composer require barryvdh/laravel-ide-helper生成两种方式 都认不出来这个函数,你的可以认出来吗。很多函数都认不出来,但是也有一部分能认出来

JellyBool 回复 liwei19911991

我的是可以的,你看看你的 laravel 版本有对应上么?

liwei19911991 回复 JellyBool

版本号是对应的,直接用php artisan ide-helper:generate
生成的版本号一致的,很是奇怪,Route::方法能认出来,就是很多模型的方法认不出来

JellyBool 回复 liwei19911991

这个我就不知道了,我使用起来貌似没有什么问题

Admin 回复 liwei19911991

模型方法的识别需要php artisan ide-helper:model -W

maokeyang

老大,感觉dialog_id 你这里写24有点问题 。另外,create的时候dialog_id 赋值 time().user()->id 你这样赋值 只能处理一个私信之间来回回复吧。

看了篇文章 http://www.oschina.net/question/12_70252#form_answer

b545798400 回复 maokeyang

文章不错,赞一个,这样写的话,可以把from_user_id和to_user_id给去掉,改为一个bool值,判断是发送出去还是收到。

carsonlius 回复 b545798400

form_user_id && to_user_id 在osc实列中并没有冗余哦

这两者字段用来标识到底是谁发起了私信的动作

carsonlius 回复 maokeyang

这个大赞,完美解决问题

Time02

和楼上一样的问题,两个用户通信有了dialog_id,然后其中一个在问题详情页面发私信,MessageController@store需要判断俩人之间有没有过通信,有的话使用dialog_id,没有才生成新的。

JellyBool 回复 Time02

阔以的。那你的方案OK么?

UncleCaozy

我觉得在IndexController里面传值到视图里的时候,可以groupBy(‘dialog_id’),这样就不会产生因为from_user_id和to_user_id两个角色对换的时候产生两个group的情况了,这样就是一个dialog_id为一个group,然后视图里面在这样去判断显示的聊天对象avatar和name

 @if(Auth::id()==$messageGroup->last()->from_user_id)
                                    <img width="42px" src="{$messageGroup->last()->toUser->avatar}" alt="">
                                        @else
                                        <img width="42px" src="{$messageGroup->last()->fromUser->avatar}" alt="">
                                    @endif
扬扬的小天地

如果 A向B 连续发送了3条私信,每次发送私信都会产生一个dialog_id,那 B 的 inbox列表只展示了 A的最新的一条, 那前面两条A发的私信是不是就被忽视掉了

JellyBool 回复 扬扬的小天地

要不这样,dialog_id 取两个用户的 id 值:form_user_id加上一个横杆,再加上 to_user_id,类似这样:6-12 表示用户 6 向 12 这个用户发私信,如果 12 这个用户向 6 发私信,直接就使用 12-6 ,那么在查找这两个用户私信的时候,是否可以这样:就找 6-12 或者 12-6 的数据。

这个方案可行不?你试试。

扬扬的小天地 回复 JellyBool

我理解私信就像是聊天记录, 不管是a发给b 还是b发给a,最终各自看到的都是 a和b 之间的所有对话 我的理解只需要一个标识a和b对话的的唯一id值就可以了,回头我再试试

JellyBool 回复 扬扬的小天地

嗯,对的。就是这样的。