Echo 的發(fā)送私信是怎么做的
這篇教程新鮮的東西不多,私信發(fā)送和帖子發(fā)布的做法如出一轍,都是使用 Ajax 異步實(shí)現(xiàn),參見(jiàn)這篇文章:Echo 的發(fā)帖操作是怎么做的
直接看前端 js 代碼 letter.js,異步的發(fā)送私信請(qǐng)求具體是如何發(fā)送出去的:

通過(guò) id 選擇器獲取 recipient-name(收信人的 username) 和 message-text(具體私信內(nèi)容) 的值,將這兩個(gè)值作為參數(shù)傳遞給 /letter/send 接口。

我們?cè)賮?lái)看看那個(gè)后端接口是啥,下述這段代碼在 MessageController 中:

發(fā)送私信的本質(zhì)是啥,就是一個(gè)在 letter 數(shù)據(jù)庫(kù)表中插入一行記錄罷了,詳細(xì)可見(jiàn) addMessage 方法,非常簡(jiǎn)單,這里不再貼圖出來(lái)了。
另外,這里有兩個(gè)需要注意的點(diǎn):
1)第一個(gè)需要注意的就是,conversation_id 的賦值,上篇文章我們介紹過(guò),對(duì)于這個(gè)字段,我們約定,id 小的在前,id 大的在后。
2)第二個(gè)需要注意的就是,插入數(shù)據(jù)庫(kù)的私信記錄默認(rèn)狀態(tài)是未讀(status = 0)的,那么,當(dāng)對(duì)方(收信人)獲取私信列表的時(shí)候,也就是掃描數(shù)據(jù)庫(kù),就可以獲取到這條狀態(tài)是未讀的私信,從而修改相應(yīng)的未讀消息數(shù)量。
可能有些小伙伴會(huì)有疑惑,既然這條私信狀態(tài)在數(shù)據(jù)庫(kù)的記錄中是未讀的,那對(duì)于這個(gè)發(fā)信人來(lái)說(shuō),把他發(fā)出去的私信算作未讀的話,是不是不太符合大眾的邏輯?
是的。所以我們查詢未讀私信數(shù)量的 SQL 語(yǔ)句是這樣寫的:

to_id = userId,也就是說(shuō),判斷是否是未讀私信的時(shí)候,只判斷那些別人發(fā)給我的私信。而我發(fā)給別人的私信,壓根就不會(huì)納入未讀私信的考慮范疇,盡管我發(fā)給別人的這條私信記錄在數(shù)據(jù)庫(kù)中的狀態(tài)是 1(未讀),但是那是對(duì)于別人(收信人)來(lái)說(shuō)的。

博主小碩在讀,深耕 Java,目前在維護(hù)一個(gè)教程類倉(cāng)庫(kù) CS-Wiki「Gitee 官方推薦項(xiàng)目,現(xiàn)已 1.7k+ star,倉(cāng)庫(kù)地址:https://gitee.com/veal98/CS-Wiki」,公眾號(hào)上的文章也會(huì)在此同步更新,歡迎各位前來(lái)交流學(xué)習(xí)。準(zhǔn)備春招秋招的小伙伴可以參考我的這個(gè)論壇項(xiàng)目 Echo「Gitee 官方推薦項(xiàng)目,現(xiàn)已 800+ star,倉(cāng)庫(kù)地址:https://gitee.com/veal98/Echo」。配套教程正在同步更新中,公眾號(hào)后臺(tái)回復(fù) "Echo" 即可免費(fèi)獲取。另外,雖然現(xiàn)在本號(hào)仍然很小,不過(guò)我還是建了一個(gè)交流群『 小牛肉和它的小伙伴們』,感興趣的各位可以下方掃碼加我微信回復(fù) "進(jìn)群",我拉你進(jìn)群:

