Laravel模型間關系設置分表方法詳解


在實際開發中經常用到分庫分表,比如用戶表分成 100 張,那么這個時候查詢數據需要設置分表,比如 Laravel 的 Model 類中提供了 setTable 方法:

/**

 * Set the table associated with the model.

 *

 * @param  string  $table

 * @return $this

 */

public function setTable($table)

{

    $this->table = $table;

  

    return $this;

}

  

那么對數據表的增刪改查需要先 new 一個模型實例,再設置表名。如:

(new Circle())->setTable("t_group_" . hashID($userid, 20))

->newQuery()

->where('group_id', $request->group_id)

->update($attributes);

  

這個很簡單,那么在模型間關系比如 HasOne,HasMany 等使用這種方式的情況下,如何設置分表呢?

找了半天沒找到好的辦法,以 HasOne 為例,只好復制 Model 類中的 HasOne 方法,改成 myHasOne,並傳入表名,並且在函數里對象實例化后調用 setTable,果然可以。

代碼如下:

public function detail()

{

    return $this->myHasOne(Circle::class, 'group_id', 'group_id', 't_group_' . hashID($this->userid, 20));

}

  

public function myHasOne($related, $foreignKey = null, $localKey = null, $table)

{

    $foreignKey = $foreignKey ?: $this->getForeignKey();

  

    $instance = (new $related)->setTable($table);

  

    $localKey = $localKey ?: $this->getKeyName();

  

    return new HasOne($instance->newQuery(), $this, $instance->getTable() . '.' . $foreignKey, $localKey);

}

  

不知道大家有沒有更優雅的方式。

以上就是Laravel模型間關系設置分表方法詳解的詳細內容

更多學習內容請訪問:

騰訊T3-T4標准精品PHP架構師教程目錄大全,只要你看完保證薪資上升一個台階(持續更新)

以上內容希望幫助到大家,很多PHPer在進階的時候總會遇到一些問題和瓶頸,業務代碼寫多了沒有方向感,不知道該從那里入手去提升,對此我整理了一些資料,包括但不限於:分布式架構、高可擴展、高性能、高並發、服務器性能調優、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql優化、shell腳本、Docker、微服務、Nginx等多個知識點高級進階干貨需要的可以免費分享給大家,需要的可以加入我的官方群點擊此處

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM