摘要:如這個很簡單,那么在模型間關系比如,等使用這種方式的情況下,如何設置分表呢找了半天沒找到好的辦法,以為例,只好復制類中的方法,改成,并傳入表名,并且在函數里對象實例化后調用,果然可以。
在實際開發中經常用到分庫分表,比如用戶表分成 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); }
不知道大家有沒有更優雅的方式。
(原文地址:https://blog.tanteng.me/2018/...)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28628.html
摘要:前幾天寫了一遍關于分表關聯的查詢,但是我個人覺得還不算完美,于是今天重新看了一下模型的底層代碼,終于寫出我暫時覺得最滿意的代碼風格,簡潔優雅是核心。關聯查詢用了渴求式加載,就能有效減少的條數,保證數據庫的性能。 前幾天寫了一遍關于laravel分表關聯的查詢,但是我個人覺得還不算完美,于是今天重新看了一下laravel模型的底層代碼,終于寫出我暫時覺得最滿意的代碼-laravel風格,...
摘要:是什么是一個,全稱為,翻譯為對象關系映射如果只把它當成數組庫抽象層那就太小看它了。所謂對象,就是本文所說的模型對象關系映射,即為模型間關系。至此,深入理解系列文章到此結束。 原文發表在我的個人網站:深入理解 Laravel Eloquent(三)——模型間關系(關聯) 在本篇文章中,我將跟大家一起學習 Eloquent 中最復雜也是最難理解的部分——模型間關系。官方英文文檔中...
摘要:實驗一個抽象類,有個方法,通過延遲靜態綁定實例化并返回。這里如果把注釋打開,打印的就是重寫的值如果把抽象類改成普通類,改成的方式實例化,結果就不同了,打印的屬性都是各自類的屬性。 (原文地址,內容以原文為準,可能修改或者補充:https://blog.tanteng.me/2017/...) 關于 PHP 的 new static 延遲靜態綁定,或者叫后期靜態綁定,在 Laravel...
摘要:為關聯關系設置約束子模型的等于父模型的上面設置的字段的值子類實現這個抽象方法通過上面代碼看到創建實例時主要是做了一些配置相關的操作,設置了子模型父模型兩個模型的關聯字段和關聯的約束。不過當查詢父模型時,可以預加載關聯數據。 Database 模型關聯 上篇文章我們主要講了Eloquent Model關于基礎的CRUD方法的實現,Eloquent Model中除了基礎的CRUD外還有一個...
摘要:一簡介的數據庫查詢構造器提供了一個方便流暢的接口,用來創建及運行數據庫查詢語句。的查詢構造器使用參數綁定,來保護你的應用程序免受注入的攻擊。和返回的是影響行數,即失敗為,成功為刪除行數。 相信很多人在學習 Laravel 時,會對 ORM 返回的數據類型產生混淆,如返回集合,模或者整數類型,下面將對增刪改查操作進行一個小結。 一、簡介 Laravel 的數據庫查詢構造器提供了一個方便、...
閱讀 1239·2021-11-11 16:55
閱讀 1537·2021-10-08 10:16
閱讀 1188·2021-09-26 10:20
閱讀 3569·2021-09-01 10:47
閱讀 2451·2019-08-30 15:52
閱讀 2682·2019-08-30 13:18
閱讀 3194·2019-08-30 13:15
閱讀 1115·2019-08-30 10:55