摘要:如這個很簡單,那么在模型間關(guān)系比如,等使用這種方式的情況下,如何設(shè)置分表呢找了半天沒找到好的辦法,以為例,只好復(fù)制類中的方法,改成,并傳入表名,并且在函數(shù)里對象實(shí)例化后調(diào)用,果然可以。
在實(shí)際開發(fā)中經(jīng)常用到分庫分表,比如用戶表分成 100 張,那么這個時候查詢數(shù)據(jù)需要設(shè)置分表,比如 Laravel 的 Model 類中提供了 setTable 方法:
/** * Set the table associated with the model. * * @param string $table * @return $this */ public function setTable($table) { $this->table = $table; return $this; }
那么對數(shù)據(jù)表的增刪改查需要先 new 一個模型實(shí)例,再設(shè)置表名。如:
(new Circle())->setTable("t_group_" . hashID($userid, 20)) ->newQuery() ->where("group_id", $request->group_id) ->update($attributes);
這個很簡單,那么在模型間關(guān)系比如 HasOne,HasMany 等使用這種方式的情況下,如何設(shè)置分表呢?
找了半天沒找到好的辦法,以 HasOne 為例,只好復(fù)制 Model 類中的 HasOne 方法,改成 myHasOne,并傳入表名,并且在函數(shù)里對象實(shí)例化后調(diào)用 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); }
不知道大家有沒有更優(yōu)雅的方式。
(原文地址:https://blog.tanteng.me/2018/...)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/28628.html
摘要:前幾天寫了一遍關(guān)于分表關(guān)聯(lián)的查詢,但是我個人覺得還不算完美,于是今天重新看了一下模型的底層代碼,終于寫出我暫時覺得最滿意的代碼風(fēng)格,簡潔優(yōu)雅是核心。關(guān)聯(lián)查詢用了渴求式加載,就能有效減少的條數(shù),保證數(shù)據(jù)庫的性能。 前幾天寫了一遍關(guān)于laravel分表關(guān)聯(lián)的查詢,但是我個人覺得還不算完美,于是今天重新看了一下laravel模型的底層代碼,終于寫出我暫時覺得最滿意的代碼-laravel風(fēng)格,...
摘要:是什么是一個,全稱為,翻譯為對象關(guān)系映射如果只把它當(dāng)成數(shù)組庫抽象層那就太小看它了。所謂對象,就是本文所說的模型對象關(guān)系映射,即為模型間關(guān)系。至此,深入理解系列文章到此結(jié)束。 原文發(fā)表在我的個人網(wǎng)站:深入理解 Laravel Eloquent(三)——模型間關(guān)系(關(guān)聯(lián)) 在本篇文章中,我將跟大家一起學(xué)習(xí) Eloquent 中最復(fù)雜也是最難理解的部分——模型間關(guān)系。官方英文文檔中...
摘要:實(shí)驗(yàn)一個抽象類,有個方法,通過延遲靜態(tài)綁定實(shí)例化并返回。這里如果把注釋打開,打印的就是重寫的值如果把抽象類改成普通類,改成的方式實(shí)例化,結(jié)果就不同了,打印的屬性都是各自類的屬性。 (原文地址,內(nèi)容以原文為準(zhǔn),可能修改或者補(bǔ)充:https://blog.tanteng.me/2017/...) 關(guān)于 PHP 的 new static 延遲靜態(tài)綁定,或者叫后期靜態(tài)綁定,在 Laravel...
摘要:為關(guān)聯(lián)關(guān)系設(shè)置約束子模型的等于父模型的上面設(shè)置的字段的值子類實(shí)現(xiàn)這個抽象方法通過上面代碼看到創(chuàng)建實(shí)例時主要是做了一些配置相關(guān)的操作,設(shè)置了子模型父模型兩個模型的關(guān)聯(lián)字段和關(guān)聯(lián)的約束。不過當(dāng)查詢父模型時,可以預(yù)加載關(guān)聯(lián)數(shù)據(jù)。 Database 模型關(guān)聯(lián) 上篇文章我們主要講了Eloquent Model關(guān)于基礎(chǔ)的CRUD方法的實(shí)現(xiàn),Eloquent Model中除了基礎(chǔ)的CRUD外還有一個...
摘要:一簡介的數(shù)據(jù)庫查詢構(gòu)造器提供了一個方便流暢的接口,用來創(chuàng)建及運(yùn)行數(shù)據(jù)庫查詢語句。的查詢構(gòu)造器使用參數(shù)綁定,來保護(hù)你的應(yīng)用程序免受注入的攻擊。和返回的是影響行數(shù),即失敗為,成功為刪除行數(shù)。 相信很多人在學(xué)習(xí) Laravel 時,會對 ORM 返回的數(shù)據(jù)類型產(chǎn)生混淆,如返回集合,?;蛘哒麛?shù)類型,下面將對增刪改查操作進(jìn)行一個小結(jié)。 一、簡介 Laravel 的數(shù)據(jù)庫查詢構(gòu)造器提供了一個方便、...
閱讀 1285·2021-11-11 16:55
閱讀 1548·2021-10-08 10:16
閱讀 1205·2021-09-26 10:20
閱讀 3587·2021-09-01 10:47
閱讀 2465·2019-08-30 15:52
閱讀 2693·2019-08-30 13:18
閱讀 3204·2019-08-30 13:15
閱讀 1141·2019-08-30 10:55