Laravel等框架模型關(guān)聯(lián)的可用性淺析
早期開發(fā)中,模型關(guān)聯(lián)帶來非常大的便利性。同時(shí)也提升了數(shù)據(jù)庫查詢效率(避免了重復(fù)查詢,相關(guān)解釋如 laravel 的 n+1 查詢問題)。
比如說,獲取用戶信息的接口,接口中除了要返回 user 表的數(shù)據(jù)外,還需要返回類似 user_option 或者 user_info 等表的數(shù)據(jù)。這個(gè)時(shí)候用 laravel 的模型關(guān)聯(lián)的形式如下:
class UserModel extends Model {
  protected $table = 'user';
  public $timestamps = false;
  
  public function userOption()
  {
    return $this->hasOne(UserOptionModel::class , 'user_id' , 'id');
  }
  
  public function findById(int $user_id)
  {
    $res = self::with(['user_option'])
      ->find($user_id);
    return $res;
  }
}
class UserOptionModel extends Model {
  protected $table = 'user_option';
  public $timestamps = false;
}
模型關(guān)聯(lián)從上述代碼看,用起來相當(dāng)便利!
但是當(dāng)后期,你的系統(tǒng)用戶量上去后,不可避免的要用上類似 redis 這樣的緩存。假設(shè)用戶表需要緩存的話,那么結(jié)果可能就是另外一種景象了。
class UserCache {
  // 獲取用戶信息
  public static function findById(int $user_id)
  {
    // 獲取緩存數(shù)據(jù)
    $user = Redis::string('user_' . $user_id);
    if (!empty($user)) {
      return $user;
    }
    $res = UserModel::findById($user_id);
    Redis::string('user_' . $user_id , $res);
    return $res;
  }
}
上述代碼緩存了用戶的信息到 redis,那如果針對某個(gè)用戶他的 user 表主體信息沒有發(fā)生改變,但是 user_option 表發(fā)生了改變,那么正常也應(yīng)該刪除該用戶的 redis 緩存。
這種情況下,代碼的復(fù)雜度就直線上升了!
所以,個(gè)人建議在代碼開發(fā)過程中,不要使用模型關(guān)聯(lián)!
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對我們的支持。
上一篇:Laravel 驗(yàn)證碼認(rèn)證學(xué)習(xí)記錄小結(jié)
欄 目:PHP編程
下一篇:PHP設(shè)計(jì)模式之建造者模式(Builder)原理與用法案例詳解
本文標(biāo)題:Laravel等框架模型關(guān)聯(lián)的可用性淺析
本文地址:http://www.jygsgssxh.com/a1/PHPbiancheng/11018.html
您可能感興趣的文章
- 01-11thinkphp框架類庫擴(kuò)展操作示例
 - 01-11關(guān)于Yii2框架跑腳本時(shí)內(nèi)存泄漏問題的分析與解決
 - 01-11php 實(shí)現(xiàn)簡單的登錄功能示例【基于thinkPHP框架】
 - 01-11Laravel 微信小程序后端搭建步驟詳解
 - 01-11Laravel框架Blade模板簡介及模板繼承用法分析
 - 01-11Laravel 微信小程序后端實(shí)現(xiàn)用戶登錄的示例代碼
 - 01-11Laravel框架基礎(chǔ)語法與知識點(diǎn)整理【模板變量、輸出、include引入
 - 01-11Laravel框架Eloquent ORM刪除數(shù)據(jù)操作示例
 - 01-11Laravel框架Eloquent ORM修改數(shù)據(jù)操作示例
 - 01-11Laravel框架Eloquent ORM簡介、模型建立及查詢數(shù)據(jù)操作詳解
 


閱讀排行
本欄相關(guān)
- 04-02php本站才可以請求數(shù)據(jù) php本地?cái)?shù)據(jù)庫
 - 04-02關(guān)于txt數(shù)據(jù)庫php的信息
 - 04-02php打印請求數(shù)據(jù) php打印輸出結(jié)果
 - 04-02網(wǎng)頁里php操作數(shù)據(jù)庫 php網(wǎng)頁例子
 - 04-02php插入數(shù)據(jù)庫為亂碼 php連接數(shù)據(jù)庫亂
 - 04-02php數(shù)據(jù)庫地址 phpstudy 數(shù)據(jù)庫
 - 04-02php數(shù)據(jù)庫數(shù)據(jù)相加 php數(shù)據(jù)庫添加數(shù)據(jù)
 - 04-02數(shù)據(jù)權(quán)限架構(gòu)思路php 數(shù)據(jù)權(quán)限設(shè)計(jì)方
 - 04-02php數(shù)據(jù)庫輸入變量 php里輸出數(shù)據(jù)庫數(shù)
 - 04-02php如何用導(dǎo)入數(shù)據(jù) php用來導(dǎo)入其他文
 
隨機(jī)閱讀
- 01-10delphi制作wav文件的方法
 - 01-10C#中split用法實(shí)例總結(jié)
 - 08-05織夢dedecms什么時(shí)候用欄目交叉功能?
 - 01-11ajax實(shí)現(xiàn)頁面的局部加載
 - 01-10SublimeText編譯C開發(fā)環(huán)境設(shè)置
 - 01-10使用C語言求解撲克牌的順子及n個(gè)骰子
 - 04-02jquery與jsp,用jquery
 - 08-05dedecms(織夢)副欄目數(shù)量限制代碼修改
 - 08-05DEDE織夢data目錄下的sessions文件夾有什
 - 01-11Mac OSX 打開原生自帶讀寫NTFS功能(圖文
 


