3 6 關係常見問題

2021-10-08 03:29:40 字數 2780 閱讀 6120

自引用關係是與自身有關係的關係。

當你將實體儲存在樹狀結構中時,這會非常有用。

"adjacency list"模式也使用自引用關係來實現。

例如,你想在應用程式中建立 categories 樹。

categories 可以巢狀 categories,巢狀類別可以巢狀其他類別等。

自引用關係在這裡很方便。

基本上,自引用關係只是針對實體本身的常規關係。

例如:

import

from

"typeorm"

;@entity()

export

class

category

import

from

"typeorm"

;@entity()

export

class

profile

import

from

"typeorm"

;import

from

"./profile"

;@entity()

export

class

user

當載入沒有profile加入的使用者時,你將無法在使用者物件中獲得有關個人資料的任何資訊,

甚至個人資料 id:

user
但有時您想知道此使用者的"profile id"是什麼,而不載入此使用者的全部個人資料。

要做到這一點,你只需要使用@column向實體新增另乙個屬性完全命名為自己關係建立的列。

例如:

import

from

"typeorm"

;import

from

"./profile"

;@entity()

export

class

user

) profileid:

number

; @onetoone

(type

=> profile)

@joincolumn()

profile: profile;

}

就這樣,下次載入使用者物件時,它將包含乙個配置檔案 id:

user
載入實體關係的最簡單方法是在findoptions中使用relations選項:

const users =

await connection.

getrepository

(user)

.find()

;

另一種更靈活的方法是使用querybuilder

const user =

await connection

.getrepository

(user)

.createquerybuilder

("user").

leftjoinandselect

("user.profile"

,"profile").

leftjoinandselect

("user.photos"

,"photo").

leftjoinandselect

("user.videos"

,"video").

getmany()

;

使用querybuilder你可以做innerjoinandselect而不是leftjoinandselect(要了解left joininner join之間的區別,請參閱 sql 文件),你可以通過條件加入關係資料、進行排序等。

學習更多關於querybuilder

有時先初始化關係屬性很有用,例如:

import

from

"typeorm"

;import

from

"./category"

;@entity()

export

class

question

但是在 typeorm 實體中,它可能會導致一些問題。

要理解這個問題,讓我們首先嘗試載入乙個沒有初始化集的 question 實體。

當載入 question 時,它將返回如下物件:

question
現在,當你儲存此物件時,categories將不會被觸及 - 因為它未被設定。

question
儲存物件時,它將檢查資料庫中是否有任何 categories 繫結到 question 並且會將它們之間相互分離。 為什麼? 因為關係等於或其中的任何專案將被視為從中刪除了某些內容,所以沒有其他方法可以檢查物件是否已從實體中刪除。

因此,儲存這樣的物件會給帶來一些問題,它將刪除所有以前設定的 categories。

如何避免這種行為? 只是不要在實體中初始化陣列就行。

同樣的規則適用於建構函式,但也不要在建構函式中初始化它。

常見問題 朗動常見問題

常見問題一 方向盤變沉 檢查胎壓是否正常,輪胎是否過度磨損。助力幫浦不工作,前輪氣壓低。冬天的話,冷車在冬天助力油比較稠,方向會重一點。檢查轉向助力油。1 應該是是助力系統有問題或則助力潤滑油有問題。2 如果你在駕車時感覺方向盤變緊,汽車偏向一側,需要檢查輪胎,或進行車輪平衡 定位。在這些問題剛剛發...

面試常見問題 1 this的常見問題

this 的含義 this關鍵字是乙個非常重要的語法點。毫不誇張地說,不理解它的含義,大部分開發任務都無法完成。前一章已經提到,this可以用在建構函式之中,表示例項物件。除此之外,this還可以用在別的場合。但不管是什麼場合,this都有乙個共同點 它總是返回乙個物件。簡單說,this就是屬性或方...

Spring常見問題

1 利用spring框架程式設計,console列印出log4j warn please initialize the log4j system properly?lupa開源社群 u i w.d t 說 明你的log4j.properties沒有配置。請把log4j.properties放到工程的...