摘要:介紹有關(guān)用戶之間的相互關(guān)注這樣的應(yīng)用場(chǎng)景還是很常見的每個(gè)平臺(tái)都會(huì)有這樣類似的需求就比如和知乎當(dāng)然還有最熟悉的每個(gè)人可以有關(guān)注者和粉絲建立模型表這里我們?nèi)ソ⒁粋€(gè)中間表可以想象得到的是這張表里包含了兩個(gè)用戶的我們可以去創(chuàng)建一個(gè)創(chuàng)建完我們的表
介紹
有關(guān)用戶之間的相互關(guān)注這樣的應(yīng)用場(chǎng)景還是很常見的 每個(gè)平臺(tái)都會(huì)有這樣類似的需求 就比如Segmentfault和知乎
當(dāng)然還有最熟悉的Github每個(gè)人可以有關(guān)注者和粉絲
建立模型表這里我們?nèi)ソ⒁粋€(gè)中間表 可以想象得到的是這張表里包含了兩個(gè)用戶的id 我們可以去創(chuàng)建一個(gè)Model
$ php artisan make:model Follow -m
創(chuàng)建完我們的表之后 我們?nèi)ネ晟葡卤淼淖侄涡畔?/p>
Schema::create("follows", function (Blueprint $table) { $table->increments("id"); $table->integer("follower_id")->unsigned()->index(); $table->integer("followed_id")->unsigned()->index(); $table->timestamps(); });
定義完畢之后去遷移下數(shù)據(jù)表
$ php artisan migrate定義模型方法
寫完我們的數(shù)據(jù)表 我們是將關(guān)注的信息存放在follows這個(gè)數(shù)據(jù)表的 因?yàn)檫@是用戶與用戶之間的關(guān)聯(lián)
并不是之前的用戶與帖子或文章這樣的模型關(guān)聯(lián) 其實(shí)實(shí)現(xiàn)的道理是一樣的
我們就可以在User Model里去定義對(duì)應(yīng)的關(guān)聯(lián)
//用戶關(guān)注 public function following() { return $this->belongsToMany(self::class,"follows","follower_id","followed_id")->withTimestamps(); } //用戶的粉絲 public function followers() { return $this->belongsToMany(self::class,"follows","followed_id","follower_id")->withTimestamps(); } //關(guān)注用戶 public function followThisUser($user) { return $this->following()->toggle($user); }
因?yàn)橛脩襞c用戶之間也是一種多對(duì)多的關(guān)系 所以我將關(guān)注用戶的方法寫成followThisUser
定義方法路由接下來(lái)就可以去定義相應(yīng)的方法路由了 這里為了使用方便我定義了一個(gè)控制器
$ php artisan make:controller FollowController
首先我們?nèi)ザx一下我們的路由
Route::post("/user/follow","FollowersController@follow");
如果用戶去關(guān)注另一個(gè)用戶的話 只需要去執(zhí)行follow方法 而這個(gè)方法也是一個(gè)toggle式的操作
當(dāng)然我們?cè)趫?zhí)行
$follow = $user->followThisUser($userId)
這個(gè)方法是他會(huì)返回一個(gè)數(shù)組對(duì)象 如果是執(zhí)行attach方法的話
那么$follow["attached"]是$userId的值
如果這樣的話我們就可以知道followThis這個(gè)方法到底是執(zhí)行了attach還是detach方法了
那么接著我們就可以去增加一個(gè)用戶的粉絲數(shù)或者去通知用戶發(fā)送一個(gè)消息這樣的操作了
所以你可以在執(zhí)行完成之后的邏輯是這樣的
$follow = user()->followThisUser($userId); //如果用戶關(guān)注了另一個(gè)用戶 if(count($followed["attached"])>0){ //可以去通知用戶 修改用戶的關(guān)注人數(shù)等數(shù)據(jù) return response()->json(["followed" => true]); }
當(dāng)然如果我們需要拿到一個(gè)用戶的關(guān)注的人和粉絲的話 可以去執(zhí)行
$user->following
以及
$user->followers
這樣的話我們就可以拿到對(duì)應(yīng)的用戶數(shù)據(jù)信息了
其實(shí)整個(gè)實(shí)現(xiàn)起來(lái)就和我們對(duì)一篇帖子進(jìn)行點(diǎn)贊一樣 只不過(guò)對(duì)象變成了用戶與用戶之間
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/22599.html
摘要:廢話不多說(shuō),下面我簡(jiǎn)單介紹一下兩個(gè)包的用法吧。還有的是這里使用了,如何去理解以及更好地使用最后,當(dāng)然是要感謝超哥。經(jīng)討論更名為更名為更名為更名為 showImg(https://pigjian.com/storage/post_img/2017-04-12/follow-vote.png); 本文主要介紹兩個(gè)包: Laravel - Follow : https://github.co...
摘要:然而,我們需要注意的是僅是軟件設(shè)計(jì)模式依賴注入的一種便利的實(shí)現(xiàn)形式。容器本身不是依賴注入的必要條件,在框架他只是讓其變得更加簡(jiǎn)便。首先,讓我們探索下為什么依賴注入是有益的。繼續(xù)深入讓我們通過(guò)另一個(gè)示例來(lái)加深對(duì)依賴注入的理解。 聲明:本文并非博主原創(chuàng),而是來(lái)自對(duì)《Laravel 4 From Apprentice to Artisan》閱讀的翻譯和理解,當(dāng)然也不是原汁原味的翻譯,能保證9...
摘要:事件驅(qū)動(dòng)編程是圖形用戶界面和其他應(yīng)用程序例如應(yīng)用程序中使用的主要范例,用于執(zhí)行某些操作來(lái)響應(yīng)用戶輸入。我們來(lái)看一下事件驅(qū)動(dòng)編程帶來(lái)的收益。現(xiàn)在讓我們看看采用事件驅(qū)動(dòng)編程方法如何實(shí)現(xiàn)上述相同的功能。 在這篇文章中我們將了解到什么是事件驅(qū)動(dòng)編程以及在Laravel中如何開始構(gòu)建一個(gè)事件驅(qū)動(dòng)應(yīng)用,同時(shí)我們還將看到如何通過(guò)事件驅(qū)動(dòng)編程來(lái)對(duì)應(yīng)用程序的邏輯進(jìn)行解耦。 在開始之前,先說(shuō)明一下這篇文章...
摘要:默認(rèn)的應(yīng)用哈希驅(qū)動(dòng)通過(guò)新增的配置文件來(lái)控制。你可以在我們的文章中學(xué)習(xí)到更多的關(guān)于密碼哈希算法的內(nèi)容方法在類中引入了兩個(gè)新的生成唯一的方法引入了兩個(gè)新的方法來(lái)生成。 showImg(https://segmentfault.com/img/remote/1460000013229904?w=1400&h=708); Laravel 5.6 Laravel 5.6正式成為laravel框架...
摘要:上次的訪談,介紹了下可愛的依云醬,回憶傳送門。這里簡(jiǎn)單地介紹下龍女仆,全名小林家的龍女仆,為什么介紹這部劇呢因?yàn)樵O(shè)計(jì)獅顏值同學(xué)也安利了這部。劇情簡(jiǎn)介在獨(dú)身又勞累的小林劃重點(diǎn)一名程序員身邊突然出現(xiàn)的穿著女仆服裝的美少女托爾。 showImg(https://segmentfault.com/img/bVR6p5?w=900&h=385); 上次的訪談,介紹了下可愛的依云醬,回憶傳送門。不...
閱讀 924·2021-09-09 09:32
閱讀 2898·2021-09-02 10:20
閱讀 2711·2021-07-23 11:24
閱讀 838·2019-08-30 15:54
閱讀 3639·2019-08-30 15:54
閱讀 1353·2019-08-30 11:02
閱讀 2855·2019-08-26 17:40
閱讀 1136·2019-08-26 13:55