下面由laravel教程欄目給大家介紹Sight! ,希望對需要的朋友有所幫助!
今天,給大家推存一個laravel的專用組件:sight
laravel開發(fā)速度可以算是最快的了。但是,現(xiàn)在如果加上sight,那么,你的開發(fā)速度會更加快。
sight做了什么呢?
sight是在server side實現(xiàn)了一個presenter層。從而讓你把從服務(wù)器中查出的數(shù)據(jù)輕松轉(zhuǎn)換為可展示的數(shù)據(jù)。自從有了sight,laravel成了唯一支持server side的mvp模式的框架。
為什么要用sight呢?
一、是加快開發(fā)速度。
二、國內(nèi)的phper都了解,大廠是禁止sql聯(lián)表三個表以上的。遇到初學者,會在for循環(huán)中查詢數(shù)據(jù)庫。如果你禁止了,則還有可能是,他們把相關(guān)id pluck出來。查出結(jié)果,然后,再for循環(huán)中嵌套for循環(huán)去查相關(guān)的關(guān)聯(lián)數(shù)據(jù)。
sight則是提供了很好的pluck函數(shù),查出id后,請求到相關(guān)數(shù)據(jù)交給sight,sight會為你拼接好數(shù)據(jù)。它的做法是通過關(guān)聯(lián)id為key把數(shù)據(jù)整理好。從而大大提升了程序效率。
三、sight的使用相當簡單。
比如以下示例,幾乎類似于model的使用。
namespace?AppPresenter use?BardoqiSightPresenter; use?BardoqiSightTraitsPresenterTrait; use?BardoqiSightEnumsMappingTypeEnum? use?BardoqiSightEnumsPaginateTypeEnum? use?AppRepositoriesArticleRepository; use?AppRepositoriesUserRepository;? class?ArticlePresenter?extents?Presenter { ???use?PresenterTrait; ???public?function?getArticleList($where) ???{ ???????$articleArray?=?ArticleRepository::getList($where); ???????$user_ids?=?$this->selectFields('id','title','created_at','created_by') ????????????->fromLocal($articleArray,'articles') ????????????->pluck('created_by'); ???????$users?=?UserRepository::getUsersWithIds($user_ids); ???????$this->innerJoinForeign($users,'userss') ????????????->onRelationByObject(Relation::of() ????????????????->localAlias('articles') ????????????????->localField('created_by') ????????????????->foreignAlias('users') ????????????????->foreighField('id'))? ????????????->addFieldMappingByObject(FieldMapping::of() ????????????????->key('created_at') ????????????????->src('created_at') ????????????????->type(MappingTypeEnum::METHOD_NAME)) ????????????->addFieldMappingByObject(FieldMapping::of() ????????????????->key('created_by') ????????????????->src('user_name') ????????????????->type(MappingTypeEnum::JOIN_FIELD));????????? ???????return?$this->toPaginateArray(PaginateTypeEnum::PAGINATE_API); ???} }
上例中,代碼則是把created_at從int轉(zhuǎn)換成了時間,把created_by從user id轉(zhuǎn)換成了用戶名。
我們看出:created_at所用的是MappingTypeEnum::METHOD_NAME,這個方法在哪里呢,是在PresenterTrait中。所以,你也可以定義自己的Trait。
created_by則是直接讀取關(guān)聯(lián)數(shù)組中的user_name,因為用的是MappingTypeEnum::JOIN_FIELD。
上面代碼看起來有些長,但是,onRelationByObject()可以改用 onRelation()傳參方式,代碼就短了。
同樣addFieldMappingByObject(),改用addFieldMappingList()用數(shù)組傳入,代碼也短了。
Sight遠遠不只是這一點功能,它不僅支持MySQL查出的數(shù)據(jù),同時支持ElasticSearch查出的數(shù)據(jù)。
雖然是純數(shù)組操作,它一樣也有innerJoin和outerJoin,并且,有hasOne,hasMany ……
當然,還有更多的功能,這個你就要仔細看文檔了。
Sight試圖解決你查出數(shù)據(jù)后,將其轉(zhuǎn)換成可展示數(shù)據(jù)中的不爽,它做得很好,真的能讓你 Coding More Happy; Coding More Quickly!
Github 地址: https://github.com/BardoQi/Sight
Sight——殺手級提升Laravel開發(fā)速度的組件現(xiàn)在開源了!趕緊FORK,趕緊STAR!