日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Laravel Model 利用 Macroable 为数据模型添加宏能力

發布時間:2024/4/13 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Laravel Model 利用 Macroable 为数据模型添加宏能力 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【摘要】簡單的說一下宏能力,這個類是 IlluminateSupportTraitsMacroable 其中利用重載實現了可以定義宏的功能,即通過 macro 靜態方法添加回調,并定義一個名字。利用 __call 當前類沒有這個函數的時候執行這個函數名注冊的回調。

產生需求

在使用 Laravel 開發 ThinkSNS Plus 的時候,因為很多功能塊都沒有寫在一個庫里面,利用拓展包的形式添加實際功能,里面很多地方也用到了“多態多對多”的關系。問題來了,開發一個問答程序,想要給用戶模型增加發布的問題或者回答的關系,起初是繼承一份 User 模型,添加了關系,之后就發現問題了,因為用戶的 tag 是使用多態多對多的關系,我通過繼承的用戶模型是無法拿到這種關系數據的因為 *able_type 是 user 數據模型類名稱或者別名。而我繼承之后類也就發生改變了。

完成需求

隨之想到,在 Laravel 中有一個 Trait 叫做 Macroable 然后發現 Builder 都有這種能力,而 Model 沒有,隨之也將這個 Trait 添加到要使用的model上,后來發現,如果其他模型也要用是不是也要再添加一次?隨之寫了一份 Trait :


只要在要使用的 model 中 use 即可。

使用

有了這個 Trait 那么我們添加到 User 模型中,就可以使用宏能力為其動態添加函數了:

這樣,我們可以直接 :

拿到用戶發布的所有問題了。

以上代碼都來自于ThinkSNS Plus,看完整的開發代碼可以看倉庫:

GitHub: https://github.com/slimkit/th...(開源不易,求 Star )

ThinkSNS官網:http://thinksns.com/

開源版源碼官方正版獲取唯一渠道:關注公眾號“thinksns”,回復“開源版”即可獲得最新源碼壓縮文件地址。

總結

以上是生活随笔為你收集整理的Laravel Model 利用 Macroable 为数据模型添加宏能力的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。