[{"data":1,"prerenderedAt":6522},["ShallowReactive",2],{"article-fr-\u002Fbackend\u002Fnest-js\u002Funlocking-the-power-of-relationships-with-typeorm":3,"article-sibling-fr-\u002Fbackend\u002Fnest-js\u002Funlocking-the-power-of-relationships-with-typeorm":3445,"surround-fr-\u002Fbackend\u002Fnest-js\u002Funlocking-the-power-of-relationships-with-typeorm":6495,"related-fr-\u002Fbackend\u002Fnest-js\u002Funlocking-the-power-of-relationships-with-typeorm":6502},{"id":4,"title":5,"body":6,"date":3428,"description":3429,"extension":3430,"img":3431,"meta":3432,"navigation":265,"path":3433,"seo":3434,"slug":3435,"stem":3436,"tags":3437,"topics":3441,"__hash__":3444},"content\u002F2.backend\u002F1.nest-js\u002F4.unlocking-the-power-of-relationships-with-typeorm.fr.md","Maîtriser NestJS : libérer la puissance des relations avec TypeORM et les bases SQL",{"type":7,"value":8,"toc":3412},"minimark",[9,14,18,21,36,40,43,46,84,87,91,101,104,145,148,153,160,503,512,518,773,779,794,799,802,805,1121,1126,1136,1140,1805,1809,1818,1821,1837,1950,2246,2283,2287,2290,2846,2850,2859,2864,2994,3010,3014,3017,3272,3276,3279,3401,3405,3408],[10,11,13],"h2",{"id":12},"introduction","Introduction",[15,16,17],"p",{},"Bienvenue dans « Maîtriser NestJS : libérer la puissance des relations avec TypeORM et les\nbases SQL ». Dans cet article, on regarde comment NestJS, conjointement avec TypeORM et les\nbases SQL, peut t'aider à construire des structures de données complexes et à gérer leurs\ninteractions. À la fin de ce tutoriel, tu seras capable de concevoir des APIs qui gèrent des\nconnexions de données complexes avec aisance, et tu feras passer ta maîtrise de NestJS au\nniveau supérieur.",[15,19,20],{},"Que tu sois un développeur NestJS expérimenté qui veut élargir ses connaissances ou un\ndébutant impatient de maîtriser les subtilités des relations de données, cette exploration\ncomplète te donnera l'expérience nécessaire pour construire des applications à la pointe.\nAlors, c'est parti — apprenons à concevoir des systèmes solides et interconnectés avec NestJS,\nTypeORM et les bases SQL.",[22,23,24],"blockquote",{},[15,25,26,27,35],{},"J'ai créé un dépôt GitHub pour cette série, accessible à l'\n",[28,29,34],"a",{"href":30,"rel":31,"title":33},"https:\u002F\u002Fgithub.com\u002Fdenisakp\u002Fawesome-nest-js",[32],"nofollow","Projet awesome nest-js","adresse suivante",".",[10,37,39],{"id":38},"cest-quoi-les-relations","C'est quoi les relations",[15,41,42],{},"Les relations sont des connexions formées entre deux tables ou plus. Elles s'établissent via\ndes champs communs aux tables, qui incluent souvent des clés primaires et étrangères.",[15,44,45],{},"Il existe trois types de relations :",[47,48,49,61,74],"ol",{},[50,51,52,56,57,35],"li",{},[53,54,55],"strong",{},"One-to-one"," : chaque ligne de la table primaire a exactement une ligne dans la table\nétrangère. Pour définir ce type de relation, on utilise le décorateur ",[58,59,60],"code",{},"@OneToOne()",[50,62,63,66,67,70,71,35],{},[53,64,65],{},"One-to-many \u002F Many-to-one"," : chaque ligne de la table primaire est connectée à une ou\nplusieurs lignes de la table étrangère. Pour définir ce type de relation, on utilise les\ndécorateurs ",[58,68,69],{},"@OneToMany()"," et ",[58,72,73],{},"@ManyToOne()",[50,75,76,79,80,83],{},[53,77,78],{},"Many-to-many"," : chaque ligne de la table primaire a plusieurs lignes liées dans la table\nétrangère, et chaque enregistrement de la table étrangère a plusieurs lignes liées dans la\ntable primaire. On utilise ",[58,81,82],{},"@ManyToMany()"," pour définir ce type de relation.",[15,85,86],{},"On va passer en revue chacun de ces termes en détail.",[10,88,90],{"id":89},"one-to-one","One-To-One",[15,92,93,94,70,97,100],{},"One-to-one est une relation où A contient une seule instance de B, et B contient une seule\ninstance de A. Prenons par exemple les entités ",[53,95,96],{},"User",[53,98,99],{},"Profile",". Un utilisateur ne peut\navoir qu'un seul profil, et un profil n'appartient qu'à un seul utilisateur.",[15,102,103],{},"Puisqu'on va implémenter l'authentification et l'autorisation dans le prochain article, on\ncommence par créer les ressources liées. Créons donc les ressources REST API profiles et users.",[105,106,112],"pre",{"className":107,"code":108,"filename":109,"language":110,"meta":111,"style":111},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","     nest g resource profiles\n     nest g resource users\n","bash","shell","",[58,113,114,133],{"__ignoreMap":111},[115,116,119,123,127,130],"span",{"class":117,"line":118},"line",1,[115,120,122],{"class":121},"sBMFI","     nest",[115,124,126],{"class":125},"sfazB"," g",[115,128,129],{"class":125}," resource",[115,131,132],{"class":125}," profiles\n",[115,134,136,138,140,142],{"class":117,"line":135},2,[115,137,122],{"class":121},[115,139,126],{"class":125},[115,141,129],{"class":125},[115,143,144],{"class":125}," users\n",[15,146,147],{},"Voici la sortie pour la création de la ressource profiles :",[149,150],"post-image",{"alt":151,"source":152},"Création d'une ressource Nest","https:\u002F\u002Fres.cloudinary.com\u002Fdpdwhd6ka\u002Fimage\u002Fupload\u002Ff_auto,q_auto\u002Fv1\u002FBlog\u002Farticles\u002Fnest-js\u002F4.unlocking-the-power-of-relationships-with-typeorm\u002Fhj3fhthehvn3vnltgewb",[15,154,155,156,159],{},"Explorons ",[58,157,158],{},"user.entity.ts"," :",[105,161,165],{"className":162,"code":163,"filename":158,"language":164,"meta":111,"style":111},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { UserRole } from 'src\u002Fenums\u002Fuser.role';\nimport { Profile } from 'src\u002Fprofiles\u002Fentities\u002Fprofile.entity';\nimport { Column, Entity, OneToOne, PrimaryGeneratedColumn } from 'typeorm';\n\n@Entity('users')\nexport class User {\n  @PrimaryGeneratedColumn()\n  id: number;\n\n  @Column()\n  name: string;\n\n  @Column({ unique: true })\n  email: string;\n\n  @Column()\n  password: string;\n\n  @Column({ type: 'enum', enum: UserRole, default: UserRole.CUSTOMER })\n  role: string;\n}\n\n","ts",[58,166,167,199,221,260,267,290,306,318,333,338,348,361,366,391,403,408,417,429,434,485,497],{"__ignoreMap":111},[115,168,169,173,177,181,184,187,190,193,196],{"class":117,"line":118},[115,170,172],{"class":171},"s7zQu","import",[115,174,176],{"class":175},"sMK4o"," {",[115,178,180],{"class":179},"sTEyZ"," UserRole",[115,182,183],{"class":175}," }",[115,185,186],{"class":171}," from",[115,188,189],{"class":175}," '",[115,191,192],{"class":125},"src\u002Fenums\u002Fuser.role",[115,194,195],{"class":175},"'",[115,197,198],{"class":175},";\n",[115,200,201,203,205,208,210,212,214,217,219],{"class":117,"line":135},[115,202,172],{"class":171},[115,204,176],{"class":175},[115,206,207],{"class":179}," Profile",[115,209,183],{"class":175},[115,211,186],{"class":171},[115,213,189],{"class":175},[115,215,216],{"class":125},"src\u002Fprofiles\u002Fentities\u002Fprofile.entity",[115,218,195],{"class":175},[115,220,198],{"class":175},[115,222,224,226,228,231,234,237,239,242,244,247,249,251,253,256,258],{"class":117,"line":223},3,[115,225,172],{"class":171},[115,227,176],{"class":175},[115,229,230],{"class":179}," Column",[115,232,233],{"class":175},",",[115,235,236],{"class":179}," Entity",[115,238,233],{"class":175},[115,240,241],{"class":179}," OneToOne",[115,243,233],{"class":175},[115,245,246],{"class":179}," PrimaryGeneratedColumn",[115,248,183],{"class":175},[115,250,186],{"class":171},[115,252,189],{"class":175},[115,254,255],{"class":125},"typeorm",[115,257,195],{"class":175},[115,259,198],{"class":175},[115,261,263],{"class":117,"line":262},4,[115,264,266],{"emptyLinePlaceholder":265},true,"\n",[115,268,270,273,277,280,282,285,287],{"class":117,"line":269},5,[115,271,272],{"class":175},"@",[115,274,276],{"class":275},"s2Zo4","Entity",[115,278,279],{"class":179},"(",[115,281,195],{"class":175},[115,283,284],{"class":125},"users",[115,286,195],{"class":175},[115,288,289],{"class":179},")\n",[115,291,293,296,300,303],{"class":117,"line":292},6,[115,294,295],{"class":171},"export",[115,297,299],{"class":298},"spNyl"," class",[115,301,302],{"class":121}," User",[115,304,305],{"class":175}," {\n",[115,307,309,312,315],{"class":117,"line":308},7,[115,310,311],{"class":175},"  @",[115,313,314],{"class":275},"PrimaryGeneratedColumn",[115,316,317],{"class":179},"()\n",[115,319,321,325,328,331],{"class":117,"line":320},8,[115,322,324],{"class":323},"swJcz","  id",[115,326,327],{"class":175},":",[115,329,330],{"class":121}," number",[115,332,198],{"class":175},[115,334,336],{"class":117,"line":335},9,[115,337,266],{"emptyLinePlaceholder":265},[115,339,341,343,346],{"class":117,"line":340},10,[115,342,311],{"class":175},[115,344,345],{"class":275},"Column",[115,347,317],{"class":179},[115,349,351,354,356,359],{"class":117,"line":350},11,[115,352,353],{"class":323},"  name",[115,355,327],{"class":175},[115,357,358],{"class":121}," string",[115,360,198],{"class":175},[115,362,364],{"class":117,"line":363},12,[115,365,266],{"emptyLinePlaceholder":265},[115,367,369,371,373,375,378,381,383,387,389],{"class":117,"line":368},13,[115,370,311],{"class":175},[115,372,345],{"class":275},[115,374,279],{"class":179},[115,376,377],{"class":175},"{",[115,379,380],{"class":323}," unique",[115,382,327],{"class":175},[115,384,386],{"class":385},"sfNiH"," true",[115,388,183],{"class":175},[115,390,289],{"class":179},[115,392,394,397,399,401],{"class":117,"line":393},14,[115,395,396],{"class":323},"  email",[115,398,327],{"class":175},[115,400,358],{"class":121},[115,402,198],{"class":175},[115,404,406],{"class":117,"line":405},15,[115,407,266],{"emptyLinePlaceholder":265},[115,409,411,413,415],{"class":117,"line":410},16,[115,412,311],{"class":175},[115,414,345],{"class":275},[115,416,317],{"class":179},[115,418,420,423,425,427],{"class":117,"line":419},17,[115,421,422],{"class":323},"  password",[115,424,327],{"class":175},[115,426,358],{"class":121},[115,428,198],{"class":175},[115,430,432],{"class":117,"line":431},18,[115,433,266],{"emptyLinePlaceholder":265},[115,435,437,439,441,443,445,448,450,452,455,457,459,462,464,466,468,471,473,475,477,480,483],{"class":117,"line":436},19,[115,438,311],{"class":175},[115,440,345],{"class":275},[115,442,279],{"class":179},[115,444,377],{"class":175},[115,446,447],{"class":323}," type",[115,449,327],{"class":175},[115,451,189],{"class":175},[115,453,454],{"class":125},"enum",[115,456,195],{"class":175},[115,458,233],{"class":175},[115,460,461],{"class":323}," enum",[115,463,327],{"class":175},[115,465,180],{"class":179},[115,467,233],{"class":175},[115,469,470],{"class":323}," default",[115,472,327],{"class":175},[115,474,180],{"class":179},[115,476,35],{"class":175},[115,478,479],{"class":179},"CUSTOMER ",[115,481,482],{"class":175},"}",[115,484,289],{"class":179},[115,486,488,491,493,495],{"class":117,"line":487},20,[115,489,490],{"class":323},"  role",[115,492,327],{"class":175},[115,494,358],{"class":121},[115,496,198],{"class":175},[115,498,500],{"class":117,"line":499},21,[115,501,502],{"class":175},"}\n",[22,504,505],{},[15,506,507,508,511],{},"L'enum ",[58,509,510],{},"UserRole"," est disponible dans le code source. Tu devrais y jeter un œil si tu veux\nvoir comment il est implémenté.",[15,513,514,515,159],{},"Maintenant explorons le contenu de ",[58,516,517],{},"profile.entity.ts",[105,519,521],{"className":162,"code":520,"filename":517,"language":164,"meta":111,"style":111},"import { User } from 'src\u002Fusers\u002Fentities\u002Fuser.entity';\nimport { Column, Entity, JoinColumn, OneToOne, PrimaryGeneratedColumn } from 'typeorm';\n\n@Entity('profiles')\nexport class Profile {\n  @PrimaryGeneratedColumn()\n  id: number;\n\n  @Column({ nullable: true })\n  full_address?: string;\n\n  @Column({ nullable: true })\n  photo?: string;\n\n  @OneToOne(() => User, (user) => user.profile) \u002F\u002F specify inverse side as a second parameter\n  @JoinColumn()\n  user: User;\n}\n\n",[58,522,523,544,581,585,602,612,620,630,634,655,667,671,691,702,706,749,758,769],{"__ignoreMap":111},[115,524,525,527,529,531,533,535,537,540,542],{"class":117,"line":118},[115,526,172],{"class":171},[115,528,176],{"class":175},[115,530,302],{"class":179},[115,532,183],{"class":175},[115,534,186],{"class":171},[115,536,189],{"class":175},[115,538,539],{"class":125},"src\u002Fusers\u002Fentities\u002Fuser.entity",[115,541,195],{"class":175},[115,543,198],{"class":175},[115,545,546,548,550,552,554,556,558,561,563,565,567,569,571,573,575,577,579],{"class":117,"line":135},[115,547,172],{"class":171},[115,549,176],{"class":175},[115,551,230],{"class":179},[115,553,233],{"class":175},[115,555,236],{"class":179},[115,557,233],{"class":175},[115,559,560],{"class":179}," JoinColumn",[115,562,233],{"class":175},[115,564,241],{"class":179},[115,566,233],{"class":175},[115,568,246],{"class":179},[115,570,183],{"class":175},[115,572,186],{"class":171},[115,574,189],{"class":175},[115,576,255],{"class":125},[115,578,195],{"class":175},[115,580,198],{"class":175},[115,582,583],{"class":117,"line":223},[115,584,266],{"emptyLinePlaceholder":265},[115,586,587,589,591,593,595,598,600],{"class":117,"line":262},[115,588,272],{"class":175},[115,590,276],{"class":275},[115,592,279],{"class":179},[115,594,195],{"class":175},[115,596,597],{"class":125},"profiles",[115,599,195],{"class":175},[115,601,289],{"class":179},[115,603,604,606,608,610],{"class":117,"line":269},[115,605,295],{"class":171},[115,607,299],{"class":298},[115,609,207],{"class":121},[115,611,305],{"class":175},[115,613,614,616,618],{"class":117,"line":292},[115,615,311],{"class":175},[115,617,314],{"class":275},[115,619,317],{"class":179},[115,621,622,624,626,628],{"class":117,"line":308},[115,623,324],{"class":323},[115,625,327],{"class":175},[115,627,330],{"class":121},[115,629,198],{"class":175},[115,631,632],{"class":117,"line":320},[115,633,266],{"emptyLinePlaceholder":265},[115,635,636,638,640,642,644,647,649,651,653],{"class":117,"line":335},[115,637,311],{"class":175},[115,639,345],{"class":275},[115,641,279],{"class":179},[115,643,377],{"class":175},[115,645,646],{"class":323}," nullable",[115,648,327],{"class":175},[115,650,386],{"class":385},[115,652,183],{"class":175},[115,654,289],{"class":179},[115,656,657,660,663,665],{"class":117,"line":340},[115,658,659],{"class":323},"  full_address",[115,661,662],{"class":175},"?:",[115,664,358],{"class":121},[115,666,198],{"class":175},[115,668,669],{"class":117,"line":350},[115,670,266],{"emptyLinePlaceholder":265},[115,672,673,675,677,679,681,683,685,687,689],{"class":117,"line":363},[115,674,311],{"class":175},[115,676,345],{"class":275},[115,678,279],{"class":179},[115,680,377],{"class":175},[115,682,646],{"class":323},[115,684,327],{"class":175},[115,686,386],{"class":385},[115,688,183],{"class":175},[115,690,289],{"class":179},[115,692,693,696,698,700],{"class":117,"line":368},[115,694,695],{"class":323},"  photo",[115,697,662],{"class":175},[115,699,358],{"class":121},[115,701,198],{"class":175},[115,703,704],{"class":117,"line":393},[115,705,266],{"emptyLinePlaceholder":265},[115,707,708,710,713,715,718,721,723,725,728,732,735,737,740,742,745],{"class":117,"line":405},[115,709,311],{"class":175},[115,711,712],{"class":275},"OneToOne",[115,714,279],{"class":179},[115,716,717],{"class":175},"()",[115,719,720],{"class":298}," =>",[115,722,302],{"class":179},[115,724,233],{"class":175},[115,726,727],{"class":175}," (",[115,729,731],{"class":730},"sHdIc","user",[115,733,734],{"class":175},")",[115,736,720],{"class":298},[115,738,739],{"class":179}," user",[115,741,35],{"class":175},[115,743,744],{"class":179},"profile) ",[115,746,748],{"class":747},"sHwdD","\u002F\u002F specify inverse side as a second parameter\n",[115,750,751,753,756],{"class":117,"line":410},[115,752,311],{"class":175},[115,754,755],{"class":275},"JoinColumn",[115,757,317],{"class":179},[115,759,760,763,765,767],{"class":117,"line":419},[115,761,762],{"class":323},"  user",[115,764,327],{"class":175},[115,766,302],{"class":121},[115,768,198],{"class":175},[115,770,771],{"class":117,"line":431},[115,772,502],{"class":175},[15,774,775,776,778],{},"Ci-dessus, on a utilisé le décorateur ",[58,777,60],{},". Son argument est une fonction qui renvoie\nla classe de l'entité avec laquelle on souhaite établir une relation.",[15,780,781,782,785,786,789,790,793],{},"Le décorateur ",[58,783,784],{},"@JoinColumn()"," spécifie que la relation est détenue par l'entité Profile. Il\nsignifie que les lignes de la table Profile contiennent la colonne ",[58,787,788],{},"userId",", qui peut stocker\nl'",[58,791,792],{},"id"," d'un utilisateur. On ne l'utilise que d'un côté de la relation.",[795,796,798],"h3",{"id":797},"relation-bidirectionnelle","Relation bidirectionnelle",[15,800,801],{},"Notre relation est actuellement unidirectionnelle. Ça signifie qu'un seul côté de la relation\nconnaît l'autre. Avec TypeORM, les relations peuvent être uni- ou bidirectionnelles. Les\nunidirectionnelles n'ont un décorateur de relation que d'un seul côté. Les bidirectionnelles\nen ont des deux côtés.",[15,803,804],{},"On vient de créer une relation unidirectionnelle. Rendons-la bidirectionnelle :",[105,806,808],{"className":162,"code":807,"filename":517,"language":164,"meta":111,"style":111},"import { UserRole } from 'src\u002Fenums\u002Fuser.role';\nimport { Profile } from 'src\u002Fprofiles\u002Fentities\u002Fprofile.entity';\nimport { Column, Entity, OneToOne, PrimaryGeneratedColumn } from 'typeorm';\n\n@Entity('users')\nexport class User {\n  @PrimaryGeneratedColumn()\n  id: number;\n\n  @Column()\n  name: string;\n\n  @Column({ unique: true })\n  email: string;\n\n  @Column()\n  password: string;\n\n  @Column({ type: 'enum', enum: UserRole, default: UserRole.CUSTOMER })\n  role: string;\n\n  @OneToOne(() => Profile, (profile) => profile.user)\n  profile: Profile;\n}\n",[58,809,810,830,850,882,886,902,912,920,930,934,942,952,956,976,986,990,998,1008,1012,1056,1066,1070,1104,1116],{"__ignoreMap":111},[115,811,812,814,816,818,820,822,824,826,828],{"class":117,"line":118},[115,813,172],{"class":171},[115,815,176],{"class":175},[115,817,180],{"class":179},[115,819,183],{"class":175},[115,821,186],{"class":171},[115,823,189],{"class":175},[115,825,192],{"class":125},[115,827,195],{"class":175},[115,829,198],{"class":175},[115,831,832,834,836,838,840,842,844,846,848],{"class":117,"line":135},[115,833,172],{"class":171},[115,835,176],{"class":175},[115,837,207],{"class":179},[115,839,183],{"class":175},[115,841,186],{"class":171},[115,843,189],{"class":175},[115,845,216],{"class":125},[115,847,195],{"class":175},[115,849,198],{"class":175},[115,851,852,854,856,858,860,862,864,866,868,870,872,874,876,878,880],{"class":117,"line":223},[115,853,172],{"class":171},[115,855,176],{"class":175},[115,857,230],{"class":179},[115,859,233],{"class":175},[115,861,236],{"class":179},[115,863,233],{"class":175},[115,865,241],{"class":179},[115,867,233],{"class":175},[115,869,246],{"class":179},[115,871,183],{"class":175},[115,873,186],{"class":171},[115,875,189],{"class":175},[115,877,255],{"class":125},[115,879,195],{"class":175},[115,881,198],{"class":175},[115,883,884],{"class":117,"line":262},[115,885,266],{"emptyLinePlaceholder":265},[115,887,888,890,892,894,896,898,900],{"class":117,"line":269},[115,889,272],{"class":175},[115,891,276],{"class":275},[115,893,279],{"class":179},[115,895,195],{"class":175},[115,897,284],{"class":125},[115,899,195],{"class":175},[115,901,289],{"class":179},[115,903,904,906,908,910],{"class":117,"line":292},[115,905,295],{"class":171},[115,907,299],{"class":298},[115,909,302],{"class":121},[115,911,305],{"class":175},[115,913,914,916,918],{"class":117,"line":308},[115,915,311],{"class":175},[115,917,314],{"class":275},[115,919,317],{"class":179},[115,921,922,924,926,928],{"class":117,"line":320},[115,923,324],{"class":323},[115,925,327],{"class":175},[115,927,330],{"class":121},[115,929,198],{"class":175},[115,931,932],{"class":117,"line":335},[115,933,266],{"emptyLinePlaceholder":265},[115,935,936,938,940],{"class":117,"line":340},[115,937,311],{"class":175},[115,939,345],{"class":275},[115,941,317],{"class":179},[115,943,944,946,948,950],{"class":117,"line":350},[115,945,353],{"class":323},[115,947,327],{"class":175},[115,949,358],{"class":121},[115,951,198],{"class":175},[115,953,954],{"class":117,"line":363},[115,955,266],{"emptyLinePlaceholder":265},[115,957,958,960,962,964,966,968,970,972,974],{"class":117,"line":368},[115,959,311],{"class":175},[115,961,345],{"class":275},[115,963,279],{"class":179},[115,965,377],{"class":175},[115,967,380],{"class":323},[115,969,327],{"class":175},[115,971,386],{"class":385},[115,973,183],{"class":175},[115,975,289],{"class":179},[115,977,978,980,982,984],{"class":117,"line":393},[115,979,396],{"class":323},[115,981,327],{"class":175},[115,983,358],{"class":121},[115,985,198],{"class":175},[115,987,988],{"class":117,"line":405},[115,989,266],{"emptyLinePlaceholder":265},[115,991,992,994,996],{"class":117,"line":410},[115,993,311],{"class":175},[115,995,345],{"class":275},[115,997,317],{"class":179},[115,999,1000,1002,1004,1006],{"class":117,"line":419},[115,1001,422],{"class":323},[115,1003,327],{"class":175},[115,1005,358],{"class":121},[115,1007,198],{"class":175},[115,1009,1010],{"class":117,"line":431},[115,1011,266],{"emptyLinePlaceholder":265},[115,1013,1014,1016,1018,1020,1022,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044,1046,1048,1050,1052,1054],{"class":117,"line":436},[115,1015,311],{"class":175},[115,1017,345],{"class":275},[115,1019,279],{"class":179},[115,1021,377],{"class":175},[115,1023,447],{"class":323},[115,1025,327],{"class":175},[115,1027,189],{"class":175},[115,1029,454],{"class":125},[115,1031,195],{"class":175},[115,1033,233],{"class":175},[115,1035,461],{"class":323},[115,1037,327],{"class":175},[115,1039,180],{"class":179},[115,1041,233],{"class":175},[115,1043,470],{"class":323},[115,1045,327],{"class":175},[115,1047,180],{"class":179},[115,1049,35],{"class":175},[115,1051,479],{"class":179},[115,1053,482],{"class":175},[115,1055,289],{"class":179},[115,1057,1058,1060,1062,1064],{"class":117,"line":487},[115,1059,490],{"class":323},[115,1061,327],{"class":175},[115,1063,358],{"class":121},[115,1065,198],{"class":175},[115,1067,1068],{"class":117,"line":499},[115,1069,266],{"emptyLinePlaceholder":265},[115,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1092,1094,1096,1099,1101],{"class":117,"line":1072},22,[115,1074,311],{"class":175},[115,1076,712],{"class":275},[115,1078,279],{"class":179},[115,1080,717],{"class":175},[115,1082,720],{"class":298},[115,1084,207],{"class":179},[115,1086,233],{"class":175},[115,1088,727],{"class":175},[115,1090,1091],{"class":730},"profile",[115,1093,734],{"class":175},[115,1095,720],{"class":298},[115,1097,1098],{"class":179}," profile",[115,1100,35],{"class":175},[115,1102,1103],{"class":179},"user)\n",[115,1105,1107,1110,1112,1114],{"class":117,"line":1106},23,[115,1108,1109],{"class":323},"  profile",[115,1111,327],{"class":175},[115,1113,207],{"class":121},[115,1115,198],{"class":175},[115,1117,1119],{"class":117,"line":1118},24,[115,1120,502],{"class":175},[22,1122,1123],{},[15,1124,1125],{},"À noter : la relation inverse est une idée plutôt abstraite qui n'ajoute pas de nouvelles\ncolonnes à la base.",[15,1127,1128,1129,1132,1133,1135],{},"On vient de rendre nos relations bidirectionnelles. Attention, la relation inverse n'a pas de\n",[58,1130,1131],{},"@JoinColumn",". ",[58,1134,1131],{}," ne doit être que d'un seul côté de la relation — sur la table qui\ncontient la clé étrangère.",[795,1137,1139],{"id":1138},"sauvegarder-et-récupérer-une-relation-one-to-one","Sauvegarder et récupérer une relation one-to-one",[105,1141,1144],{"className":162,"code":1142,"filename":1143,"language":164,"meta":111,"style":111},"import { HttpException, HttpStatus, Injectable } from '@nestjs\u002Fcommon';\nimport { CreateUserDto } from '.\u002Fdto\u002Fcreate-user.dto';\nimport { UpdateUserDto } from '.\u002Fdto\u002Fupdate-user.dto';\nimport { InjectRepository } from '@nestjs\u002Ftypeorm';\nimport { Repository } from 'typeorm';\nimport { User } from '.\u002Fentities\u002Fuser.entity';\nimport { Profile } from 'src\u002Fprofiles\u002Fentities\u002Fprofile.entity';\nimport { UpdateProfileDto } from 'src\u002Fprofiles\u002Fdto\u002Fupdate-profile.dto';\n\n@Injectable()\nexport class UsersService {\n  constructor(\n    @InjectRepository(User) private userRepository: Repository\u003CUser>,\n    @InjectRepository(Profile) private profileRepository: Repository\u003CProfile>,\n  ) {\n  }\n\n  async create(createUSerDto: CreateUserDto) {\n    const user = await this.userRepository.save(createUSerDto); \u002F\u002F saving the user\n\n    \u002F\u002F creating the the profile object\n    const profile = new Profile();\n    profile.full_address = createUSerDto.full_address;\n    profile.photo = createUSerDto.photo;\n    profile.user = user;\n\n    await this.profileRepository.save(profile); \u002F\u002F linking the profile to user\n\n    return this.findOne(user.id); \u002F\u002F return the user with the profile\n  }\n\n  async findOne(id: number) {\n    const user = await this.userRepository.findOne({\n      where: { id },\n      relations: { profile: true }, \u002F\u002F by doing this, we're implementing the eager loading to automatically load the profile object\n    });\n\n    if (!user) throw new HttpException('user not found', HttpStatus.NOT_FOUND);\n\n    return user;\n  }\n}\n\n","user.service.ts",[58,1145,1146,1178,1200,1222,1244,1265,1286,1306,1328,1332,1341,1352,1360,1389,1413,1420,1425,1429,1450,1486,1490,1495,1512,1533,1552,1567,1572,1598,1603,1629,1634,1639,1659,1683,1699,1721,1731,1736,1781,1786,1795,1800],{"__ignoreMap":111},[115,1147,1148,1150,1152,1155,1157,1160,1162,1165,1167,1169,1171,1174,1176],{"class":117,"line":118},[115,1149,172],{"class":171},[115,1151,176],{"class":175},[115,1153,1154],{"class":179}," HttpException",[115,1156,233],{"class":175},[115,1158,1159],{"class":179}," HttpStatus",[115,1161,233],{"class":175},[115,1163,1164],{"class":179}," Injectable",[115,1166,183],{"class":175},[115,1168,186],{"class":171},[115,1170,189],{"class":175},[115,1172,1173],{"class":125},"@nestjs\u002Fcommon",[115,1175,195],{"class":175},[115,1177,198],{"class":175},[115,1179,1180,1182,1184,1187,1189,1191,1193,1196,1198],{"class":117,"line":135},[115,1181,172],{"class":171},[115,1183,176],{"class":175},[115,1185,1186],{"class":179}," CreateUserDto",[115,1188,183],{"class":175},[115,1190,186],{"class":171},[115,1192,189],{"class":175},[115,1194,1195],{"class":125},".\u002Fdto\u002Fcreate-user.dto",[115,1197,195],{"class":175},[115,1199,198],{"class":175},[115,1201,1202,1204,1206,1209,1211,1213,1215,1218,1220],{"class":117,"line":223},[115,1203,172],{"class":171},[115,1205,176],{"class":175},[115,1207,1208],{"class":179}," UpdateUserDto",[115,1210,183],{"class":175},[115,1212,186],{"class":171},[115,1214,189],{"class":175},[115,1216,1217],{"class":125},".\u002Fdto\u002Fupdate-user.dto",[115,1219,195],{"class":175},[115,1221,198],{"class":175},[115,1223,1224,1226,1228,1231,1233,1235,1237,1240,1242],{"class":117,"line":262},[115,1225,172],{"class":171},[115,1227,176],{"class":175},[115,1229,1230],{"class":179}," InjectRepository",[115,1232,183],{"class":175},[115,1234,186],{"class":171},[115,1236,189],{"class":175},[115,1238,1239],{"class":125},"@nestjs\u002Ftypeorm",[115,1241,195],{"class":175},[115,1243,198],{"class":175},[115,1245,1246,1248,1250,1253,1255,1257,1259,1261,1263],{"class":117,"line":269},[115,1247,172],{"class":171},[115,1249,176],{"class":175},[115,1251,1252],{"class":179}," Repository",[115,1254,183],{"class":175},[115,1256,186],{"class":171},[115,1258,189],{"class":175},[115,1260,255],{"class":125},[115,1262,195],{"class":175},[115,1264,198],{"class":175},[115,1266,1267,1269,1271,1273,1275,1277,1279,1282,1284],{"class":117,"line":292},[115,1268,172],{"class":171},[115,1270,176],{"class":175},[115,1272,302],{"class":179},[115,1274,183],{"class":175},[115,1276,186],{"class":171},[115,1278,189],{"class":175},[115,1280,1281],{"class":125},".\u002Fentities\u002Fuser.entity",[115,1283,195],{"class":175},[115,1285,198],{"class":175},[115,1287,1288,1290,1292,1294,1296,1298,1300,1302,1304],{"class":117,"line":308},[115,1289,172],{"class":171},[115,1291,176],{"class":175},[115,1293,207],{"class":179},[115,1295,183],{"class":175},[115,1297,186],{"class":171},[115,1299,189],{"class":175},[115,1301,216],{"class":125},[115,1303,195],{"class":175},[115,1305,198],{"class":175},[115,1307,1308,1310,1312,1315,1317,1319,1321,1324,1326],{"class":117,"line":320},[115,1309,172],{"class":171},[115,1311,176],{"class":175},[115,1313,1314],{"class":179}," UpdateProfileDto",[115,1316,183],{"class":175},[115,1318,186],{"class":171},[115,1320,189],{"class":175},[115,1322,1323],{"class":125},"src\u002Fprofiles\u002Fdto\u002Fupdate-profile.dto",[115,1325,195],{"class":175},[115,1327,198],{"class":175},[115,1329,1330],{"class":117,"line":335},[115,1331,266],{"emptyLinePlaceholder":265},[115,1333,1334,1336,1339],{"class":117,"line":340},[115,1335,272],{"class":175},[115,1337,1338],{"class":275},"Injectable",[115,1340,317],{"class":179},[115,1342,1343,1345,1347,1350],{"class":117,"line":350},[115,1344,295],{"class":171},[115,1346,299],{"class":298},[115,1348,1349],{"class":121}," UsersService",[115,1351,305],{"class":175},[115,1353,1354,1357],{"class":117,"line":363},[115,1355,1356],{"class":298},"  constructor",[115,1358,1359],{"class":175},"(\n",[115,1361,1362,1365,1368,1371,1374,1377,1379,1381,1384,1386],{"class":117,"line":368},[115,1363,1364],{"class":175},"    @",[115,1366,1367],{"class":275},"InjectRepository",[115,1369,1370],{"class":179},"(User) ",[115,1372,1373],{"class":298},"private",[115,1375,1376],{"class":730}," userRepository",[115,1378,327],{"class":175},[115,1380,1252],{"class":121},[115,1382,1383],{"class":175},"\u003C",[115,1385,96],{"class":121},[115,1387,1388],{"class":175},">,\n",[115,1390,1391,1393,1395,1398,1400,1403,1405,1407,1409,1411],{"class":117,"line":393},[115,1392,1364],{"class":175},[115,1394,1367],{"class":275},[115,1396,1397],{"class":179},"(Profile) ",[115,1399,1373],{"class":298},[115,1401,1402],{"class":730}," profileRepository",[115,1404,327],{"class":175},[115,1406,1252],{"class":121},[115,1408,1383],{"class":175},[115,1410,99],{"class":121},[115,1412,1388],{"class":175},[115,1414,1415,1418],{"class":117,"line":405},[115,1416,1417],{"class":175},"  )",[115,1419,305],{"class":175},[115,1421,1422],{"class":117,"line":410},[115,1423,1424],{"class":175},"  }\n",[115,1426,1427],{"class":117,"line":419},[115,1428,266],{"emptyLinePlaceholder":265},[115,1430,1431,1434,1437,1439,1442,1444,1446,1448],{"class":117,"line":431},[115,1432,1433],{"class":298},"  async",[115,1435,1436],{"class":323}," create",[115,1438,279],{"class":175},[115,1440,1441],{"class":730},"createUSerDto",[115,1443,327],{"class":175},[115,1445,1186],{"class":121},[115,1447,734],{"class":175},[115,1449,305],{"class":175},[115,1451,1452,1455,1457,1460,1463,1466,1469,1471,1474,1476,1478,1480,1483],{"class":117,"line":436},[115,1453,1454],{"class":298},"    const",[115,1456,739],{"class":179},[115,1458,1459],{"class":175}," =",[115,1461,1462],{"class":171}," await",[115,1464,1465],{"class":175}," this.",[115,1467,1468],{"class":179},"userRepository",[115,1470,35],{"class":175},[115,1472,1473],{"class":275},"save",[115,1475,279],{"class":323},[115,1477,1441],{"class":179},[115,1479,734],{"class":323},[115,1481,1482],{"class":175},";",[115,1484,1485],{"class":747}," \u002F\u002F saving the user\n",[115,1487,1488],{"class":117,"line":487},[115,1489,266],{"emptyLinePlaceholder":265},[115,1491,1492],{"class":117,"line":499},[115,1493,1494],{"class":747},"    \u002F\u002F creating the the profile object\n",[115,1496,1497,1499,1501,1503,1506,1508,1510],{"class":117,"line":1072},[115,1498,1454],{"class":298},[115,1500,1098],{"class":179},[115,1502,1459],{"class":175},[115,1504,1505],{"class":175}," new",[115,1507,207],{"class":275},[115,1509,717],{"class":323},[115,1511,198],{"class":175},[115,1513,1514,1517,1519,1522,1524,1527,1529,1531],{"class":117,"line":1106},[115,1515,1516],{"class":179},"    profile",[115,1518,35],{"class":175},[115,1520,1521],{"class":179},"full_address",[115,1523,1459],{"class":175},[115,1525,1526],{"class":179}," createUSerDto",[115,1528,35],{"class":175},[115,1530,1521],{"class":179},[115,1532,198],{"class":175},[115,1534,1535,1537,1539,1542,1544,1546,1548,1550],{"class":117,"line":1118},[115,1536,1516],{"class":179},[115,1538,35],{"class":175},[115,1540,1541],{"class":179},"photo",[115,1543,1459],{"class":175},[115,1545,1526],{"class":179},[115,1547,35],{"class":175},[115,1549,1541],{"class":179},[115,1551,198],{"class":175},[115,1553,1555,1557,1559,1561,1563,1565],{"class":117,"line":1554},25,[115,1556,1516],{"class":179},[115,1558,35],{"class":175},[115,1560,731],{"class":179},[115,1562,1459],{"class":175},[115,1564,739],{"class":179},[115,1566,198],{"class":175},[115,1568,1570],{"class":117,"line":1569},26,[115,1571,266],{"emptyLinePlaceholder":265},[115,1573,1575,1578,1580,1583,1585,1587,1589,1591,1593,1595],{"class":117,"line":1574},27,[115,1576,1577],{"class":171},"    await",[115,1579,1465],{"class":175},[115,1581,1582],{"class":179},"profileRepository",[115,1584,35],{"class":175},[115,1586,1473],{"class":275},[115,1588,279],{"class":323},[115,1590,1091],{"class":179},[115,1592,734],{"class":323},[115,1594,1482],{"class":175},[115,1596,1597],{"class":747}," \u002F\u002F linking the profile to user\n",[115,1599,1601],{"class":117,"line":1600},28,[115,1602,266],{"emptyLinePlaceholder":265},[115,1604,1606,1609,1611,1614,1616,1618,1620,1622,1624,1626],{"class":117,"line":1605},29,[115,1607,1608],{"class":171},"    return",[115,1610,1465],{"class":175},[115,1612,1613],{"class":275},"findOne",[115,1615,279],{"class":323},[115,1617,731],{"class":179},[115,1619,35],{"class":175},[115,1621,792],{"class":179},[115,1623,734],{"class":323},[115,1625,1482],{"class":175},[115,1627,1628],{"class":747}," \u002F\u002F return the user with the profile\n",[115,1630,1632],{"class":117,"line":1631},30,[115,1633,1424],{"class":175},[115,1635,1637],{"class":117,"line":1636},31,[115,1638,266],{"emptyLinePlaceholder":265},[115,1640,1642,1644,1647,1649,1651,1653,1655,1657],{"class":117,"line":1641},32,[115,1643,1433],{"class":298},[115,1645,1646],{"class":323}," findOne",[115,1648,279],{"class":175},[115,1650,792],{"class":730},[115,1652,327],{"class":175},[115,1654,330],{"class":121},[115,1656,734],{"class":175},[115,1658,305],{"class":175},[115,1660,1662,1664,1666,1668,1670,1672,1674,1676,1678,1680],{"class":117,"line":1661},33,[115,1663,1454],{"class":298},[115,1665,739],{"class":179},[115,1667,1459],{"class":175},[115,1669,1462],{"class":171},[115,1671,1465],{"class":175},[115,1673,1468],{"class":179},[115,1675,35],{"class":175},[115,1677,1613],{"class":275},[115,1679,279],{"class":323},[115,1681,1682],{"class":175},"{\n",[115,1684,1686,1689,1691,1693,1696],{"class":117,"line":1685},34,[115,1687,1688],{"class":323},"      where",[115,1690,327],{"class":175},[115,1692,176],{"class":175},[115,1694,1695],{"class":179}," id",[115,1697,1698],{"class":175}," },\n",[115,1700,1702,1705,1707,1709,1711,1713,1715,1718],{"class":117,"line":1701},35,[115,1703,1704],{"class":323},"      relations",[115,1706,327],{"class":175},[115,1708,176],{"class":175},[115,1710,1098],{"class":323},[115,1712,327],{"class":175},[115,1714,386],{"class":385},[115,1716,1717],{"class":175}," },",[115,1719,1720],{"class":747}," \u002F\u002F by doing this, we're implementing the eager loading to automatically load the profile object\n",[115,1722,1724,1727,1729],{"class":117,"line":1723},36,[115,1725,1726],{"class":175},"    }",[115,1728,734],{"class":323},[115,1730,198],{"class":175},[115,1732,1734],{"class":117,"line":1733},37,[115,1735,266],{"emptyLinePlaceholder":265},[115,1737,1739,1742,1744,1747,1749,1752,1755,1757,1759,1761,1763,1766,1768,1770,1772,1774,1777,1779],{"class":117,"line":1738},38,[115,1740,1741],{"class":171},"    if",[115,1743,727],{"class":323},[115,1745,1746],{"class":175},"!",[115,1748,731],{"class":179},[115,1750,1751],{"class":323},") ",[115,1753,1754],{"class":171},"throw",[115,1756,1505],{"class":175},[115,1758,1154],{"class":275},[115,1760,279],{"class":323},[115,1762,195],{"class":175},[115,1764,1765],{"class":125},"user not found",[115,1767,195],{"class":175},[115,1769,233],{"class":175},[115,1771,1159],{"class":179},[115,1773,35],{"class":175},[115,1775,1776],{"class":179},"NOT_FOUND",[115,1778,734],{"class":323},[115,1780,198],{"class":175},[115,1782,1784],{"class":117,"line":1783},39,[115,1785,266],{"emptyLinePlaceholder":265},[115,1787,1789,1791,1793],{"class":117,"line":1788},40,[115,1790,1608],{"class":171},[115,1792,739],{"class":179},[115,1794,198],{"class":175},[115,1796,1798],{"class":117,"line":1797},41,[115,1799,1424],{"class":175},[115,1801,1803],{"class":117,"line":1802},42,[115,1804,502],{"class":175},[10,1806,1808],{"id":1807},"many-to-one-one-to-many","Many-To-One \u002F One-To-Many",[15,1810,1811,1812,70,1814,1817],{},"Many-to-one \u002F one-to-many est une relation où A contient plusieurs instances de B, mais B ne\ncontient qu'une seule instance de A. Prenons par exemple les entités ",[53,1813,96],{},[53,1815,1816],{},"Order",". Un\nutilisateur peut avoir plusieurs commandes, mais chaque commande n'appartient qu'à un seul\nutilisateur.",[15,1819,1820],{},"Mettons rapidement en place la ressource REST API orders.",[105,1822,1824],{"className":107,"code":1823,"filename":109,"language":110,"meta":111,"style":111},"     nest g resource orders\n",[58,1825,1826],{"__ignoreMap":111},[115,1827,1828,1830,1832,1834],{"class":117,"line":118},[115,1829,122],{"class":121},[115,1831,126],{"class":125},[115,1833,129],{"class":125},[115,1835,1836],{"class":125}," orders\n",[105,1838,1840],{"className":162,"code":1839,"filename":158,"language":164,"meta":111,"style":111},"import { Order } from 'src\u002Forders\u002Fentities\u002Forder.entity';\n\n@Entity('users')\nexport class User {\n  \u002F\u002F we add the following to user entity\n  @OneToMany(() => Order, (order) => order.user)\n  orders: Order[];\n}\n",[58,1841,1842,1864,1868,1884,1894,1899,1932,1946],{"__ignoreMap":111},[115,1843,1844,1846,1848,1851,1853,1855,1857,1860,1862],{"class":117,"line":118},[115,1845,172],{"class":171},[115,1847,176],{"class":175},[115,1849,1850],{"class":179}," Order",[115,1852,183],{"class":175},[115,1854,186],{"class":171},[115,1856,189],{"class":175},[115,1858,1859],{"class":125},"src\u002Forders\u002Fentities\u002Forder.entity",[115,1861,195],{"class":175},[115,1863,198],{"class":175},[115,1865,1866],{"class":117,"line":135},[115,1867,266],{"emptyLinePlaceholder":265},[115,1869,1870,1872,1874,1876,1878,1880,1882],{"class":117,"line":223},[115,1871,272],{"class":175},[115,1873,276],{"class":275},[115,1875,279],{"class":179},[115,1877,195],{"class":175},[115,1879,284],{"class":125},[115,1881,195],{"class":175},[115,1883,289],{"class":179},[115,1885,1886,1888,1890,1892],{"class":117,"line":262},[115,1887,295],{"class":171},[115,1889,299],{"class":298},[115,1891,302],{"class":121},[115,1893,305],{"class":175},[115,1895,1896],{"class":117,"line":269},[115,1897,1898],{"class":747},"  \u002F\u002F we add the following to user entity\n",[115,1900,1901,1903,1906,1908,1910,1912,1914,1916,1918,1921,1923,1925,1928,1930],{"class":117,"line":292},[115,1902,311],{"class":175},[115,1904,1905],{"class":275},"OneToMany",[115,1907,279],{"class":179},[115,1909,717],{"class":175},[115,1911,720],{"class":298},[115,1913,1850],{"class":179},[115,1915,233],{"class":175},[115,1917,727],{"class":175},[115,1919,1920],{"class":730},"order",[115,1922,734],{"class":175},[115,1924,720],{"class":298},[115,1926,1927],{"class":179}," order",[115,1929,35],{"class":175},[115,1931,1103],{"class":179},[115,1933,1934,1937,1939,1941,1944],{"class":117,"line":308},[115,1935,1936],{"class":323},"  orders",[115,1938,327],{"class":175},[115,1940,1850],{"class":121},[115,1942,1943],{"class":179},"[]",[115,1945,198],{"class":175},[115,1947,1948],{"class":117,"line":320},[115,1949,502],{"class":175},[105,1951,1954],{"className":162,"code":1952,"filename":1953,"language":164,"meta":111,"style":111},"import { OrderStatus } from 'src\u002Fenums\u002Forder.status';\nimport { User } from 'src\u002Fusers\u002Fentities\u002Fuser.entity';\nimport { Column, CreateDateColumn, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm';\n\n@Entity('orders')\nexport class Order {\n  @PrimaryGeneratedColumn()\n  id: number;\n\n  @Column({ type: 'enum', enum: OrderStatus, default: OrderStatus.PLACED })\n  status: string; \u002F\u002F the order status\n\n  @Column()\n  amount: number;\n\n  @ManyToOne(() => User, (user) => user.orders)\n  user: User;\n\n  @CreateDateColumn()\n  created_datetime?: Date;\n}\n","order.entity.ts",[58,1955,1956,1978,1998,2036,2040,2057,2067,2075,2085,2089,2134,2148,2152,2160,2171,2175,2207,2217,2221,2230,2242],{"__ignoreMap":111},[115,1957,1958,1960,1962,1965,1967,1969,1971,1974,1976],{"class":117,"line":118},[115,1959,172],{"class":171},[115,1961,176],{"class":175},[115,1963,1964],{"class":179}," OrderStatus",[115,1966,183],{"class":175},[115,1968,186],{"class":171},[115,1970,189],{"class":175},[115,1972,1973],{"class":125},"src\u002Fenums\u002Forder.status",[115,1975,195],{"class":175},[115,1977,198],{"class":175},[115,1979,1980,1982,1984,1986,1988,1990,1992,1994,1996],{"class":117,"line":135},[115,1981,172],{"class":171},[115,1983,176],{"class":175},[115,1985,302],{"class":179},[115,1987,183],{"class":175},[115,1989,186],{"class":171},[115,1991,189],{"class":175},[115,1993,539],{"class":125},[115,1995,195],{"class":175},[115,1997,198],{"class":175},[115,1999,2000,2002,2004,2006,2008,2011,2013,2015,2017,2020,2022,2024,2026,2028,2030,2032,2034],{"class":117,"line":223},[115,2001,172],{"class":171},[115,2003,176],{"class":175},[115,2005,230],{"class":179},[115,2007,233],{"class":175},[115,2009,2010],{"class":179}," CreateDateColumn",[115,2012,233],{"class":175},[115,2014,236],{"class":179},[115,2016,233],{"class":175},[115,2018,2019],{"class":179}," ManyToOne",[115,2021,233],{"class":175},[115,2023,246],{"class":179},[115,2025,183],{"class":175},[115,2027,186],{"class":171},[115,2029,189],{"class":175},[115,2031,255],{"class":125},[115,2033,195],{"class":175},[115,2035,198],{"class":175},[115,2037,2038],{"class":117,"line":262},[115,2039,266],{"emptyLinePlaceholder":265},[115,2041,2042,2044,2046,2048,2050,2053,2055],{"class":117,"line":269},[115,2043,272],{"class":175},[115,2045,276],{"class":275},[115,2047,279],{"class":179},[115,2049,195],{"class":175},[115,2051,2052],{"class":125},"orders",[115,2054,195],{"class":175},[115,2056,289],{"class":179},[115,2058,2059,2061,2063,2065],{"class":117,"line":292},[115,2060,295],{"class":171},[115,2062,299],{"class":298},[115,2064,1850],{"class":121},[115,2066,305],{"class":175},[115,2068,2069,2071,2073],{"class":117,"line":308},[115,2070,311],{"class":175},[115,2072,314],{"class":275},[115,2074,317],{"class":179},[115,2076,2077,2079,2081,2083],{"class":117,"line":320},[115,2078,324],{"class":323},[115,2080,327],{"class":175},[115,2082,330],{"class":121},[115,2084,198],{"class":175},[115,2086,2087],{"class":117,"line":335},[115,2088,266],{"emptyLinePlaceholder":265},[115,2090,2091,2093,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2130,2132],{"class":117,"line":340},[115,2092,311],{"class":175},[115,2094,345],{"class":275},[115,2096,279],{"class":179},[115,2098,377],{"class":175},[115,2100,447],{"class":323},[115,2102,327],{"class":175},[115,2104,189],{"class":175},[115,2106,454],{"class":125},[115,2108,195],{"class":175},[115,2110,233],{"class":175},[115,2112,461],{"class":323},[115,2114,327],{"class":175},[115,2116,1964],{"class":179},[115,2118,233],{"class":175},[115,2120,470],{"class":323},[115,2122,327],{"class":175},[115,2124,1964],{"class":179},[115,2126,35],{"class":175},[115,2128,2129],{"class":179},"PLACED ",[115,2131,482],{"class":175},[115,2133,289],{"class":179},[115,2135,2136,2139,2141,2143,2145],{"class":117,"line":350},[115,2137,2138],{"class":323},"  status",[115,2140,327],{"class":175},[115,2142,358],{"class":121},[115,2144,1482],{"class":175},[115,2146,2147],{"class":747}," \u002F\u002F the order status\n",[115,2149,2150],{"class":117,"line":363},[115,2151,266],{"emptyLinePlaceholder":265},[115,2153,2154,2156,2158],{"class":117,"line":368},[115,2155,311],{"class":175},[115,2157,345],{"class":275},[115,2159,317],{"class":179},[115,2161,2162,2165,2167,2169],{"class":117,"line":393},[115,2163,2164],{"class":323},"  amount",[115,2166,327],{"class":175},[115,2168,330],{"class":121},[115,2170,198],{"class":175},[115,2172,2173],{"class":117,"line":405},[115,2174,266],{"emptyLinePlaceholder":265},[115,2176,2177,2179,2182,2184,2186,2188,2190,2192,2194,2196,2198,2200,2202,2204],{"class":117,"line":410},[115,2178,311],{"class":175},[115,2180,2181],{"class":275},"ManyToOne",[115,2183,279],{"class":179},[115,2185,717],{"class":175},[115,2187,720],{"class":298},[115,2189,302],{"class":179},[115,2191,233],{"class":175},[115,2193,727],{"class":175},[115,2195,731],{"class":730},[115,2197,734],{"class":175},[115,2199,720],{"class":298},[115,2201,739],{"class":179},[115,2203,35],{"class":175},[115,2205,2206],{"class":179},"orders)\n",[115,2208,2209,2211,2213,2215],{"class":117,"line":419},[115,2210,762],{"class":323},[115,2212,327],{"class":175},[115,2214,302],{"class":121},[115,2216,198],{"class":175},[115,2218,2219],{"class":117,"line":431},[115,2220,266],{"emptyLinePlaceholder":265},[115,2222,2223,2225,2228],{"class":117,"line":436},[115,2224,311],{"class":175},[115,2226,2227],{"class":275},"CreateDateColumn",[115,2229,317],{"class":179},[115,2231,2232,2235,2237,2240],{"class":117,"line":487},[115,2233,2234],{"class":323},"  created_datetime",[115,2236,662],{"class":175},[115,2238,2239],{"class":121}," Date",[115,2241,198],{"class":175},[115,2243,2244],{"class":117,"line":499},[115,2245,502],{"class":175},[15,2247,2248,2249,2252,2253,2256,2257,2259,2260,2262,2263,2265,2266,1132,2268,2270,2271,2273,2274,2276,2277,2279,2280,2282],{},"On a ajouté ",[58,2250,2251],{},"@OneToMany"," à la propriété orders et défini Order comme le type de la relation\ncible. Dans une relation ",[58,2254,2255],{},"@ManyToOne"," \u002F ",[58,2258,2251],{},", tu peux omettre ",[58,2261,1131],{},".\n",[58,2264,2255],{}," ne peut pas exister sans ",[58,2267,2251],{},[58,2269,2255],{}," est requis si tu veux\nutiliser ",[58,2272,2251],{},". Cependant, si seul ",[58,2275,2255],{}," t'intéresse, tu peux le définir sans\navoir ",[58,2278,2251],{}," sur l'entité associée. Partout où ",[58,2281,2255],{}," est configuré, son entité\nliée aura un « relation id » et une clé étrangère.",[795,2284,2286],{"id":2285},"sauvegarder-et-récupérer-une-relation-one-to-many-many-to-one","Sauvegarder et récupérer une relation one-to-many \u002F many-to-one",[15,2288,2289],{},"Voici le service order complet qui implémente un CRUD sur les commandes :",[105,2291,2294],{"className":162,"code":2292,"filename":2293,"language":164,"meta":111,"style":111},"import { Injectable } from '@nestjs\u002Fcommon';\nimport { CreateOrderDto } from '.\u002Fdto\u002Fcreate-order.dto';\nimport { UpdateOrderDto } from '.\u002Fdto\u002Fupdate-order.dto';\nimport { InjectRepository } from '@nestjs\u002Ftypeorm';\nimport { Order } from '.\u002Fentities\u002Forder.entity';\nimport { Repository } from 'typeorm';\nimport { UsersService } from 'src\u002Fusers\u002Fusers.service';\n\n@Injectable()\nexport class OrdersService {\n  constructor(\n    @InjectRepository(Order)\n    private readonly orderRepository: Repository\u003COrder>,\n    private readonly userService: UsersService,\n  ) {\n  }\n\n  async create(userId: number, createOrderDto: CreateOrderDto) {\n    const user = await this.userService.findOne(userId);\n\n    const order = new Order();\n    order.amount = createOrderDto.amount;\n    order.user = user;\n\n    return await this.orderRepository.save(order);\n  }\n\n  async findAll(userId: number): Promise\u003COrder[]> {\n    const user = await this.userService.findOne(userId);\n    return await this.orderRepository.find({\n      where: { user },\n    });\n  }\n\n  async findOne(id: number): Promise\u003COrder | null> {\n    return await this.orderRepository.findOneBy({ id });\n  }\n}\n\n","order.Service.ts",[58,2295,2296,2316,2338,2360,2380,2401,2421,2442,2446,2454,2465,2471,2480,2501,2517,2523,2527,2531,2558,2585,2589,2605,2625,2639,2643,2666,2670,2674,2706,2732,2751,2763,2771,2775,2779,2811,2838,2842],{"__ignoreMap":111},[115,2297,2298,2300,2302,2304,2306,2308,2310,2312,2314],{"class":117,"line":118},[115,2299,172],{"class":171},[115,2301,176],{"class":175},[115,2303,1164],{"class":179},[115,2305,183],{"class":175},[115,2307,186],{"class":171},[115,2309,189],{"class":175},[115,2311,1173],{"class":125},[115,2313,195],{"class":175},[115,2315,198],{"class":175},[115,2317,2318,2320,2322,2325,2327,2329,2331,2334,2336],{"class":117,"line":135},[115,2319,172],{"class":171},[115,2321,176],{"class":175},[115,2323,2324],{"class":179}," CreateOrderDto",[115,2326,183],{"class":175},[115,2328,186],{"class":171},[115,2330,189],{"class":175},[115,2332,2333],{"class":125},".\u002Fdto\u002Fcreate-order.dto",[115,2335,195],{"class":175},[115,2337,198],{"class":175},[115,2339,2340,2342,2344,2347,2349,2351,2353,2356,2358],{"class":117,"line":223},[115,2341,172],{"class":171},[115,2343,176],{"class":175},[115,2345,2346],{"class":179}," UpdateOrderDto",[115,2348,183],{"class":175},[115,2350,186],{"class":171},[115,2352,189],{"class":175},[115,2354,2355],{"class":125},".\u002Fdto\u002Fupdate-order.dto",[115,2357,195],{"class":175},[115,2359,198],{"class":175},[115,2361,2362,2364,2366,2368,2370,2372,2374,2376,2378],{"class":117,"line":262},[115,2363,172],{"class":171},[115,2365,176],{"class":175},[115,2367,1230],{"class":179},[115,2369,183],{"class":175},[115,2371,186],{"class":171},[115,2373,189],{"class":175},[115,2375,1239],{"class":125},[115,2377,195],{"class":175},[115,2379,198],{"class":175},[115,2381,2382,2384,2386,2388,2390,2392,2394,2397,2399],{"class":117,"line":269},[115,2383,172],{"class":171},[115,2385,176],{"class":175},[115,2387,1850],{"class":179},[115,2389,183],{"class":175},[115,2391,186],{"class":171},[115,2393,189],{"class":175},[115,2395,2396],{"class":125},".\u002Fentities\u002Forder.entity",[115,2398,195],{"class":175},[115,2400,198],{"class":175},[115,2402,2403,2405,2407,2409,2411,2413,2415,2417,2419],{"class":117,"line":292},[115,2404,172],{"class":171},[115,2406,176],{"class":175},[115,2408,1252],{"class":179},[115,2410,183],{"class":175},[115,2412,186],{"class":171},[115,2414,189],{"class":175},[115,2416,255],{"class":125},[115,2418,195],{"class":175},[115,2420,198],{"class":175},[115,2422,2423,2425,2427,2429,2431,2433,2435,2438,2440],{"class":117,"line":308},[115,2424,172],{"class":171},[115,2426,176],{"class":175},[115,2428,1349],{"class":179},[115,2430,183],{"class":175},[115,2432,186],{"class":171},[115,2434,189],{"class":175},[115,2436,2437],{"class":125},"src\u002Fusers\u002Fusers.service",[115,2439,195],{"class":175},[115,2441,198],{"class":175},[115,2443,2444],{"class":117,"line":320},[115,2445,266],{"emptyLinePlaceholder":265},[115,2447,2448,2450,2452],{"class":117,"line":335},[115,2449,272],{"class":175},[115,2451,1338],{"class":275},[115,2453,317],{"class":179},[115,2455,2456,2458,2460,2463],{"class":117,"line":340},[115,2457,295],{"class":171},[115,2459,299],{"class":298},[115,2461,2462],{"class":121}," OrdersService",[115,2464,305],{"class":175},[115,2466,2467,2469],{"class":117,"line":350},[115,2468,1356],{"class":298},[115,2470,1359],{"class":175},[115,2472,2473,2475,2477],{"class":117,"line":363},[115,2474,1364],{"class":175},[115,2476,1367],{"class":275},[115,2478,2479],{"class":179},"(Order)\n",[115,2481,2482,2485,2488,2491,2493,2495,2497,2499],{"class":117,"line":368},[115,2483,2484],{"class":298},"    private",[115,2486,2487],{"class":298}," readonly",[115,2489,2490],{"class":730}," orderRepository",[115,2492,327],{"class":175},[115,2494,1252],{"class":121},[115,2496,1383],{"class":175},[115,2498,1816],{"class":121},[115,2500,1388],{"class":175},[115,2502,2503,2505,2507,2510,2512,2514],{"class":117,"line":393},[115,2504,2484],{"class":298},[115,2506,2487],{"class":298},[115,2508,2509],{"class":730}," userService",[115,2511,327],{"class":175},[115,2513,1349],{"class":121},[115,2515,2516],{"class":175},",\n",[115,2518,2519,2521],{"class":117,"line":405},[115,2520,1417],{"class":175},[115,2522,305],{"class":175},[115,2524,2525],{"class":117,"line":410},[115,2526,1424],{"class":175},[115,2528,2529],{"class":117,"line":419},[115,2530,266],{"emptyLinePlaceholder":265},[115,2532,2533,2535,2537,2539,2541,2543,2545,2547,2550,2552,2554,2556],{"class":117,"line":431},[115,2534,1433],{"class":298},[115,2536,1436],{"class":323},[115,2538,279],{"class":175},[115,2540,788],{"class":730},[115,2542,327],{"class":175},[115,2544,330],{"class":121},[115,2546,233],{"class":175},[115,2548,2549],{"class":730}," createOrderDto",[115,2551,327],{"class":175},[115,2553,2324],{"class":121},[115,2555,734],{"class":175},[115,2557,305],{"class":175},[115,2559,2560,2562,2564,2566,2568,2570,2573,2575,2577,2579,2581,2583],{"class":117,"line":436},[115,2561,1454],{"class":298},[115,2563,739],{"class":179},[115,2565,1459],{"class":175},[115,2567,1462],{"class":171},[115,2569,1465],{"class":175},[115,2571,2572],{"class":179},"userService",[115,2574,35],{"class":175},[115,2576,1613],{"class":275},[115,2578,279],{"class":323},[115,2580,788],{"class":179},[115,2582,734],{"class":323},[115,2584,198],{"class":175},[115,2586,2587],{"class":117,"line":487},[115,2588,266],{"emptyLinePlaceholder":265},[115,2590,2591,2593,2595,2597,2599,2601,2603],{"class":117,"line":499},[115,2592,1454],{"class":298},[115,2594,1927],{"class":179},[115,2596,1459],{"class":175},[115,2598,1505],{"class":175},[115,2600,1850],{"class":275},[115,2602,717],{"class":323},[115,2604,198],{"class":175},[115,2606,2607,2610,2612,2615,2617,2619,2621,2623],{"class":117,"line":1072},[115,2608,2609],{"class":179},"    order",[115,2611,35],{"class":175},[115,2613,2614],{"class":179},"amount",[115,2616,1459],{"class":175},[115,2618,2549],{"class":179},[115,2620,35],{"class":175},[115,2622,2614],{"class":179},[115,2624,198],{"class":175},[115,2626,2627,2629,2631,2633,2635,2637],{"class":117,"line":1106},[115,2628,2609],{"class":179},[115,2630,35],{"class":175},[115,2632,731],{"class":179},[115,2634,1459],{"class":175},[115,2636,739],{"class":179},[115,2638,198],{"class":175},[115,2640,2641],{"class":117,"line":1118},[115,2642,266],{"emptyLinePlaceholder":265},[115,2644,2645,2647,2649,2651,2654,2656,2658,2660,2662,2664],{"class":117,"line":1554},[115,2646,1608],{"class":171},[115,2648,1462],{"class":171},[115,2650,1465],{"class":175},[115,2652,2653],{"class":179},"orderRepository",[115,2655,35],{"class":175},[115,2657,1473],{"class":275},[115,2659,279],{"class":323},[115,2661,1920],{"class":179},[115,2663,734],{"class":323},[115,2665,198],{"class":175},[115,2667,2668],{"class":117,"line":1569},[115,2669,1424],{"class":175},[115,2671,2672],{"class":117,"line":1574},[115,2673,266],{"emptyLinePlaceholder":265},[115,2675,2676,2678,2681,2683,2685,2687,2689,2692,2695,2697,2699,2701,2704],{"class":117,"line":1600},[115,2677,1433],{"class":298},[115,2679,2680],{"class":323}," findAll",[115,2682,279],{"class":175},[115,2684,788],{"class":730},[115,2686,327],{"class":175},[115,2688,330],{"class":121},[115,2690,2691],{"class":175},"):",[115,2693,2694],{"class":121}," Promise",[115,2696,1383],{"class":175},[115,2698,1816],{"class":121},[115,2700,1943],{"class":179},[115,2702,2703],{"class":175},">",[115,2705,305],{"class":175},[115,2707,2708,2710,2712,2714,2716,2718,2720,2722,2724,2726,2728,2730],{"class":117,"line":1605},[115,2709,1454],{"class":298},[115,2711,739],{"class":179},[115,2713,1459],{"class":175},[115,2715,1462],{"class":171},[115,2717,1465],{"class":175},[115,2719,2572],{"class":179},[115,2721,35],{"class":175},[115,2723,1613],{"class":275},[115,2725,279],{"class":323},[115,2727,788],{"class":179},[115,2729,734],{"class":323},[115,2731,198],{"class":175},[115,2733,2734,2736,2738,2740,2742,2744,2747,2749],{"class":117,"line":1631},[115,2735,1608],{"class":171},[115,2737,1462],{"class":171},[115,2739,1465],{"class":175},[115,2741,2653],{"class":179},[115,2743,35],{"class":175},[115,2745,2746],{"class":275},"find",[115,2748,279],{"class":323},[115,2750,1682],{"class":175},[115,2752,2753,2755,2757,2759,2761],{"class":117,"line":1636},[115,2754,1688],{"class":323},[115,2756,327],{"class":175},[115,2758,176],{"class":175},[115,2760,739],{"class":179},[115,2762,1698],{"class":175},[115,2764,2765,2767,2769],{"class":117,"line":1641},[115,2766,1726],{"class":175},[115,2768,734],{"class":323},[115,2770,198],{"class":175},[115,2772,2773],{"class":117,"line":1661},[115,2774,1424],{"class":175},[115,2776,2777],{"class":117,"line":1685},[115,2778,266],{"emptyLinePlaceholder":265},[115,2780,2781,2783,2785,2787,2789,2791,2793,2795,2797,2799,2801,2804,2807,2809],{"class":117,"line":1701},[115,2782,1433],{"class":298},[115,2784,1646],{"class":323},[115,2786,279],{"class":175},[115,2788,792],{"class":730},[115,2790,327],{"class":175},[115,2792,330],{"class":121},[115,2794,2691],{"class":175},[115,2796,2694],{"class":121},[115,2798,1383],{"class":175},[115,2800,1816],{"class":121},[115,2802,2803],{"class":175}," |",[115,2805,2806],{"class":121}," null",[115,2808,2703],{"class":175},[115,2810,305],{"class":175},[115,2812,2813,2815,2817,2819,2821,2823,2826,2828,2830,2832,2834,2836],{"class":117,"line":1723},[115,2814,1608],{"class":171},[115,2816,1462],{"class":171},[115,2818,1465],{"class":175},[115,2820,2653],{"class":179},[115,2822,35],{"class":175},[115,2824,2825],{"class":275},"findOneBy",[115,2827,279],{"class":323},[115,2829,377],{"class":175},[115,2831,1695],{"class":179},[115,2833,183],{"class":175},[115,2835,734],{"class":323},[115,2837,198],{"class":175},[115,2839,2840],{"class":117,"line":1733},[115,2841,1424],{"class":175},[115,2843,2844],{"class":117,"line":1738},[115,2845,502],{"class":175},[10,2847,2849],{"id":2848},"relations-many-to-many","Relations Many-To-Many",[15,2851,2852,2853,70,2856,2858],{},"Many-to-many est une relation dans laquelle l'entité A contient plusieurs instances de\nl'entité B, et inversement. Par exemple, considérons les entités ",[53,2854,2855],{},"Product",[53,2857,1816],{},". Une\ncommande peut inclure plusieurs produits, et chaque produit peut appartenir à plusieurs\ncommandes.",[15,2860,2861,2862,159],{},"Explorons le contenu de ",[58,2863,517],{},[105,2865,2867],{"className":162,"code":2866,"filename":1953,"language":164,"meta":111,"style":111},"import { Product } from 'src\u002Fproducts\u002Fentities\u002Fproduct.entity';\nimport { ManyToMany, JoinTable } from 'typeorm';\n\n@Entity('orders')\nexport class Order {\n  \u002F\u002F ..... other properties\n\n  \u002F\u002F our new property\n  @ManyToMany(() => Product)\n  products: Product[];\n}\n",[58,2868,2869,2891,2917,2921,2937,2947,2952,2956,2961,2977,2990],{"__ignoreMap":111},[115,2870,2871,2873,2875,2878,2880,2882,2884,2887,2889],{"class":117,"line":118},[115,2872,172],{"class":171},[115,2874,176],{"class":175},[115,2876,2877],{"class":179}," Product",[115,2879,183],{"class":175},[115,2881,186],{"class":171},[115,2883,189],{"class":175},[115,2885,2886],{"class":125},"src\u002Fproducts\u002Fentities\u002Fproduct.entity",[115,2888,195],{"class":175},[115,2890,198],{"class":175},[115,2892,2893,2895,2897,2900,2902,2905,2907,2909,2911,2913,2915],{"class":117,"line":135},[115,2894,172],{"class":171},[115,2896,176],{"class":175},[115,2898,2899],{"class":179}," ManyToMany",[115,2901,233],{"class":175},[115,2903,2904],{"class":179}," JoinTable",[115,2906,183],{"class":175},[115,2908,186],{"class":171},[115,2910,189],{"class":175},[115,2912,255],{"class":125},[115,2914,195],{"class":175},[115,2916,198],{"class":175},[115,2918,2919],{"class":117,"line":223},[115,2920,266],{"emptyLinePlaceholder":265},[115,2922,2923,2925,2927,2929,2931,2933,2935],{"class":117,"line":262},[115,2924,272],{"class":175},[115,2926,276],{"class":275},[115,2928,279],{"class":179},[115,2930,195],{"class":175},[115,2932,2052],{"class":125},[115,2934,195],{"class":175},[115,2936,289],{"class":179},[115,2938,2939,2941,2943,2945],{"class":117,"line":269},[115,2940,295],{"class":171},[115,2942,299],{"class":298},[115,2944,1850],{"class":121},[115,2946,305],{"class":175},[115,2948,2949],{"class":117,"line":292},[115,2950,2951],{"class":747},"  \u002F\u002F ..... other properties\n",[115,2953,2954],{"class":117,"line":308},[115,2955,266],{"emptyLinePlaceholder":265},[115,2957,2958],{"class":117,"line":320},[115,2959,2960],{"class":747},"  \u002F\u002F our new property\n",[115,2962,2963,2965,2968,2970,2972,2974],{"class":117,"line":335},[115,2964,311],{"class":175},[115,2966,2967],{"class":275},"ManyToMany",[115,2969,279],{"class":179},[115,2971,717],{"class":175},[115,2973,720],{"class":298},[115,2975,2976],{"class":179}," Product)\n",[115,2978,2979,2982,2984,2986,2988],{"class":117,"line":340},[115,2980,2981],{"class":323},"  products",[115,2983,327],{"class":175},[115,2985,2877],{"class":121},[115,2987,1943],{"class":179},[115,2989,198],{"class":175},[115,2991,2992],{"class":117,"line":350},[115,2993,502],{"class":175},[22,2995,2996],{},[15,2997,2998,3001,3002,3005,3006,3009],{},[58,2999,3000],{},"@JoinTable()"," est requis pour les relations ",[58,3003,3004],{},"@ManyToMany",". Tu dois mettre ",[58,3007,3008],{},"@JoinTable"," sur\nun seul côté (le côté propriétaire) de la relation.",[795,3011,3013],{"id":3012},"sauvegarder-des-relations-many-to-many","Sauvegarder des relations many-to-many",[15,3015,3016],{},"Mettons à jour le fichier de service order et ajoutons quelques lignes à la méthode create :",[105,3018,3020],{"className":162,"code":3019,"filename":2293,"language":164,"meta":111,"style":111},"export class OrdersService {\n  \u002F\u002F ....previous stuffs \n\n  async create(userId: number, createOrderDto: CreateOrderDto) {\n    \u002F\u002F ..... previous stuffs\n\n    const products = [];\n\n    for (const product of createOrderDto.products) {\n      try {\n        const dbProduct = await this.productService.findOne(product);\n        products.push(dbProduct);\n      } catch (error) {\n        \u002F\u002F We'll update this later\n        console.log('failed to find product with id ' + product);\n      }\n    }\n\n    order.products = products;\n\n    \u002F\u002F .... previous stuffs\n  }\n}\n",[58,3021,3022,3032,3037,3041,3067,3072,3076,3090,3094,3121,3128,3158,3177,3194,3199,3227,3232,3237,3241,3255,3259,3264,3268],{"__ignoreMap":111},[115,3023,3024,3026,3028,3030],{"class":117,"line":118},[115,3025,295],{"class":171},[115,3027,299],{"class":298},[115,3029,2462],{"class":121},[115,3031,305],{"class":175},[115,3033,3034],{"class":117,"line":135},[115,3035,3036],{"class":747},"  \u002F\u002F ....previous stuffs \n",[115,3038,3039],{"class":117,"line":223},[115,3040,266],{"emptyLinePlaceholder":265},[115,3042,3043,3045,3047,3049,3051,3053,3055,3057,3059,3061,3063,3065],{"class":117,"line":262},[115,3044,1433],{"class":298},[115,3046,1436],{"class":323},[115,3048,279],{"class":175},[115,3050,788],{"class":730},[115,3052,327],{"class":175},[115,3054,330],{"class":121},[115,3056,233],{"class":175},[115,3058,2549],{"class":730},[115,3060,327],{"class":175},[115,3062,2324],{"class":121},[115,3064,734],{"class":175},[115,3066,305],{"class":175},[115,3068,3069],{"class":117,"line":269},[115,3070,3071],{"class":747},"    \u002F\u002F ..... previous stuffs\n",[115,3073,3074],{"class":117,"line":292},[115,3075,266],{"emptyLinePlaceholder":265},[115,3077,3078,3080,3083,3085,3088],{"class":117,"line":308},[115,3079,1454],{"class":298},[115,3081,3082],{"class":179}," products",[115,3084,1459],{"class":175},[115,3086,3087],{"class":323}," []",[115,3089,198],{"class":175},[115,3091,3092],{"class":117,"line":320},[115,3093,266],{"emptyLinePlaceholder":265},[115,3095,3096,3099,3101,3104,3107,3110,3112,3114,3117,3119],{"class":117,"line":335},[115,3097,3098],{"class":171},"    for",[115,3100,727],{"class":323},[115,3102,3103],{"class":298},"const",[115,3105,3106],{"class":179}," product",[115,3108,3109],{"class":175}," of",[115,3111,2549],{"class":179},[115,3113,35],{"class":175},[115,3115,3116],{"class":179},"products",[115,3118,1751],{"class":323},[115,3120,1682],{"class":175},[115,3122,3123,3126],{"class":117,"line":340},[115,3124,3125],{"class":171},"      try",[115,3127,305],{"class":175},[115,3129,3130,3133,3136,3138,3140,3142,3145,3147,3149,3151,3154,3156],{"class":117,"line":350},[115,3131,3132],{"class":298},"        const",[115,3134,3135],{"class":179}," dbProduct",[115,3137,1459],{"class":175},[115,3139,1462],{"class":171},[115,3141,1465],{"class":175},[115,3143,3144],{"class":179},"productService",[115,3146,35],{"class":175},[115,3148,1613],{"class":275},[115,3150,279],{"class":323},[115,3152,3153],{"class":179},"product",[115,3155,734],{"class":323},[115,3157,198],{"class":175},[115,3159,3160,3163,3165,3168,3170,3173,3175],{"class":117,"line":363},[115,3161,3162],{"class":179},"        products",[115,3164,35],{"class":175},[115,3166,3167],{"class":275},"push",[115,3169,279],{"class":323},[115,3171,3172],{"class":179},"dbProduct",[115,3174,734],{"class":323},[115,3176,198],{"class":175},[115,3178,3179,3182,3185,3187,3190,3192],{"class":117,"line":368},[115,3180,3181],{"class":175},"      }",[115,3183,3184],{"class":171}," catch",[115,3186,727],{"class":323},[115,3188,3189],{"class":179},"error",[115,3191,1751],{"class":323},[115,3193,1682],{"class":175},[115,3195,3196],{"class":117,"line":393},[115,3197,3198],{"class":747},"        \u002F\u002F We'll update this later\n",[115,3200,3201,3204,3206,3209,3211,3213,3216,3218,3221,3223,3225],{"class":117,"line":405},[115,3202,3203],{"class":179},"        console",[115,3205,35],{"class":175},[115,3207,3208],{"class":275},"log",[115,3210,279],{"class":323},[115,3212,195],{"class":175},[115,3214,3215],{"class":125},"failed to find product with id ",[115,3217,195],{"class":175},[115,3219,3220],{"class":175}," +",[115,3222,3106],{"class":179},[115,3224,734],{"class":323},[115,3226,198],{"class":175},[115,3228,3229],{"class":117,"line":410},[115,3230,3231],{"class":175},"      }\n",[115,3233,3234],{"class":117,"line":419},[115,3235,3236],{"class":175},"    }\n",[115,3238,3239],{"class":117,"line":431},[115,3240,266],{"emptyLinePlaceholder":265},[115,3242,3243,3245,3247,3249,3251,3253],{"class":117,"line":436},[115,3244,2609],{"class":179},[115,3246,35],{"class":175},[115,3248,3116],{"class":179},[115,3250,1459],{"class":175},[115,3252,3082],{"class":179},[115,3254,198],{"class":175},[115,3256,3257],{"class":117,"line":487},[115,3258,266],{"emptyLinePlaceholder":265},[115,3260,3261],{"class":117,"line":499},[115,3262,3263],{"class":747},"    \u002F\u002F .... previous stuffs\n",[115,3265,3266],{"class":117,"line":1072},[115,3267,1424],{"class":175},[115,3269,3270],{"class":117,"line":1106},[115,3271,502],{"class":175},[795,3273,3275],{"id":3274},"charger-des-relations-many-to-many","Charger des relations many-to-many",[15,3277,3278],{},"Pour charger des commandes avec leurs produits, tu dois spécifier la relation dans les\nFindOptions :",[105,3280,3282],{"className":162,"code":3281,"filename":2293,"language":164,"meta":111,"style":111},"export class OrdersService {\n  \u002F\u002F ....previous stuffs \n\n  async findOne(id: number): Promise\u003COrder | null> {\n    return await this.orderRepository.findOne({\n      relations: {\n        products: true,\n      },\n      where: { id },\n    });\n  }\n}\n",[58,3283,3284,3294,3298,3302,3332,3350,3358,3368,3373,3385,3393,3397],{"__ignoreMap":111},[115,3285,3286,3288,3290,3292],{"class":117,"line":118},[115,3287,295],{"class":171},[115,3289,299],{"class":298},[115,3291,2462],{"class":121},[115,3293,305],{"class":175},[115,3295,3296],{"class":117,"line":135},[115,3297,3036],{"class":747},[115,3299,3300],{"class":117,"line":223},[115,3301,266],{"emptyLinePlaceholder":265},[115,3303,3304,3306,3308,3310,3312,3314,3316,3318,3320,3322,3324,3326,3328,3330],{"class":117,"line":262},[115,3305,1433],{"class":298},[115,3307,1646],{"class":323},[115,3309,279],{"class":175},[115,3311,792],{"class":730},[115,3313,327],{"class":175},[115,3315,330],{"class":121},[115,3317,2691],{"class":175},[115,3319,2694],{"class":121},[115,3321,1383],{"class":175},[115,3323,1816],{"class":121},[115,3325,2803],{"class":175},[115,3327,2806],{"class":121},[115,3329,2703],{"class":175},[115,3331,305],{"class":175},[115,3333,3334,3336,3338,3340,3342,3344,3346,3348],{"class":117,"line":269},[115,3335,1608],{"class":171},[115,3337,1462],{"class":171},[115,3339,1465],{"class":175},[115,3341,2653],{"class":179},[115,3343,35],{"class":175},[115,3345,1613],{"class":275},[115,3347,279],{"class":323},[115,3349,1682],{"class":175},[115,3351,3352,3354,3356],{"class":117,"line":292},[115,3353,1704],{"class":323},[115,3355,327],{"class":175},[115,3357,305],{"class":175},[115,3359,3360,3362,3364,3366],{"class":117,"line":308},[115,3361,3162],{"class":323},[115,3363,327],{"class":175},[115,3365,386],{"class":385},[115,3367,2516],{"class":175},[115,3369,3370],{"class":117,"line":320},[115,3371,3372],{"class":175},"      },\n",[115,3374,3375,3377,3379,3381,3383],{"class":117,"line":335},[115,3376,1688],{"class":323},[115,3378,327],{"class":175},[115,3380,176],{"class":175},[115,3382,1695],{"class":179},[115,3384,1698],{"class":175},[115,3386,3387,3389,3391],{"class":117,"line":340},[115,3388,1726],{"class":175},[115,3390,734],{"class":323},[115,3392,198],{"class":175},[115,3394,3395],{"class":117,"line":350},[115,3396,1424],{"class":175},[115,3398,3399],{"class":117,"line":363},[115,3400,502],{"class":175},[10,3402,3404],{"id":3403},"résumé","Résumé",[15,3406,3407],{},"On a plongé en profondeur dans le monde des relations de données avec NestJS, TypeORM et les\nbases SQL dans cet article étendu. Ce cours t'aidera, que tu sois un développeur NestJS\nexpérimenté qui veut élargir son expertise ou un débutant désireux d'apprendre les nuances des\nrelations de données. Reste à l'écoute pour le prochain article, où on plongera dans la\nvalidation des données et la gestion d'erreurs, en t'équipant d'encore plus d'outils pour\ndevenir un expert NestJS. Rejoins-moi dans cette aventure, et maîtrisons ensemble l'art des\nrelations de données dans NestJS !",[3409,3410,3411],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":111,"searchDepth":135,"depth":135,"links":3413},[3414,3415,3416,3420,3423,3427],{"id":12,"depth":135,"text":13},{"id":38,"depth":135,"text":39},{"id":89,"depth":135,"text":90,"children":3417},[3418,3419],{"id":797,"depth":223,"text":798},{"id":1138,"depth":223,"text":1139},{"id":1807,"depth":135,"text":1808,"children":3421},[3422],{"id":2285,"depth":223,"text":2286},{"id":2848,"depth":135,"text":2849,"children":3424},[3425,3426],{"id":3012,"depth":223,"text":3013},{"id":3274,"depth":223,"text":3275},{"id":3403,"depth":135,"text":3404},"2023-10-18","Libère la puissance des relations de données avec NestJS, TypeORM et les bases SQL. Maîtrise l'art de construire des structures de données complexes et des interactions fluides. Idéal pour les développeurs NestJS expérimentés comme pour les débutants qui veulent créer des applications à la pointe.","md","https:\u002F\u002Fres.cloudinary.com\u002Fdpdwhd6ka\u002Fimage\u002Fupload\u002Fv1692780505\u002FBlog\u002Farticles\u002Fnest-js\u002Fazgcjzm8pwgdckdybir9.svg",{},"\u002Fbackend\u002Fnest-js\u002Funlocking-the-power-of-relationships-with-typeorm.fr",{"title":5,"description":3429},"unlocking-the-power-of-relationships-with-typeorm","2.backend\u002F1.nest-js\u002F4.unlocking-the-power-of-relationships-with-typeorm.fr",[3438,3439,3440],"Nest-JS","Mirco-service","API",[3442,3443],"nest-js","backend","eKO_TFItzD7OmMuYjsW6XzBxsj_GjsCjqGu4YOOyloc",{"id":3446,"title":3447,"body":3448,"date":3428,"description":6487,"extension":3430,"img":3431,"meta":6488,"navigation":265,"path":6489,"seo":6490,"slug":3435,"stem":6491,"tags":6492,"topics":6493,"__hash__":6494},"content\u002F2.backend\u002F1.nest-js\u002F4.unlocking-the-power-of-relationships-with-typeorm.md","Mastering NestJS: Unlocking the Power of Relationships with TypeORM and SQL Databases",{"type":7,"value":3449,"toc":6471},[3450,3452,3455,3458,3468,3472,3475,3478,3501,3504,3508,3511,3514,3538,3541,3544,3549,3813,3818,3824,4058,4064,4070,4074,4077,4080,4388,4393,4399,4403,4981,4985,4988,4991,5005,5109,5389,5422,5426,5429,5957,5961,5964,5969,6089,6102,6106,6109,6335,6339,6342,6462,6466,6469],[10,3451,13],{"id":12},[15,3453,3454],{},"Welcome to \"Mastering NestJS: Unlocking the Power of Relationships with TypeORM and SQL Databases.\" In this blog post,\nwe'll look at how NestJS, in conjunction with TypeORM and SQL databases, can help you build complicated data structures\nand handle interactions between them. By the end of this tutorial, you'll be able to construct APIs that handle complex\ndata connections with ease, taking your NestJS knowledge to the next level.",[15,3456,3457],{},"Whether you're a seasoned NestJS developer hoping to expand your knowledge or a beginner eager to master the ins and\nouts of data relationships, this comprehensive investigation of data relationships will provide you with the experience\nneeded to construct cutting-edge apps. So, let's get started and learn how to design strong, interconnected systems with\nNestJS, TypeORM, and SQL databases.",[22,3459,3460],{},[15,3461,3462,3463],{},"I created a GitHub repo for this series accessible at the following\n",[28,3464,3467],{"href":30,"rel":3465,"title":3466},[32],"Awesome nest-js project","address",[10,3469,3471],{"id":3470},"what-are-relations","What are relations",[15,3473,3474],{},"Relations are connections formed between two or more tables. Relations are formed using common fields from each table,\nwhich frequently include primary and foreign keys.",[15,3476,3477],{},"There are three kinds of relationships:",[47,3479,3480,3486,3495],{},[50,3481,3482,3483,3485],{},"One-to-one: Every row in the primary table has exactly one row in the foreign table. To define this type of\nrelationship, use the ",[58,3484,60],{}," decorator.",[50,3487,3488,3489,3491,3492,3494],{},"One-to-many\u002FMany-to-one: Every row in the primary table is connected to one or more rows in the foreign table. To\ndefine this type of relationship, we use the ",[58,3490,69],{}," and ",[58,3493,73],{}," decorators.",[50,3496,3497,3498,3500],{},"Many-to-many: Every row in the primary table has many related rows in the foreign table, and every record in the\nforeign table has many related rows in the primary table. Use the ",[58,3499,82],{}," decorator to define this type of\nrelation.",[15,3502,3503],{},"We will now go over each of these terms in detail",[10,3505,3507],{"id":3506},"one-to-many","One-To-Many",[15,3509,3510],{},"One-to-one is a relation where A contains only one instance of B, and B contains only one instance of A. Let's take for\nexample User and Profile entities. User can have only a single profile, and a single profile is owned by only a single\nuser.",[15,3512,3513],{},"Since we were going to implement authentication and authorization in the next post, we should start creating related\nresources. So let's create profiles and users Rest API resources.",[105,3515,3516],{"className":107,"code":108,"filename":109,"language":110,"meta":111,"style":111},[58,3517,3518,3528],{"__ignoreMap":111},[115,3519,3520,3522,3524,3526],{"class":117,"line":118},[115,3521,122],{"class":121},[115,3523,126],{"class":125},[115,3525,129],{"class":125},[115,3527,132],{"class":125},[115,3529,3530,3532,3534,3536],{"class":117,"line":135},[115,3531,122],{"class":121},[115,3533,126],{"class":125},[115,3535,129],{"class":125},[115,3537,144],{"class":125},[15,3539,3540],{},"See the following output for creating profiles resource",[149,3542],{"alt":3543,"source":152},"Create nest resource",[15,3545,3546,3547],{},"Let's explore ",[58,3548,158],{},[105,3550,3551],{"className":162,"code":163,"filename":158,"language":164,"meta":111,"style":111},[58,3552,3553,3573,3593,3625,3629,3645,3655,3663,3673,3677,3685,3695,3699,3719,3729,3733,3741,3751,3755,3799,3809],{"__ignoreMap":111},[115,3554,3555,3557,3559,3561,3563,3565,3567,3569,3571],{"class":117,"line":118},[115,3556,172],{"class":171},[115,3558,176],{"class":175},[115,3560,180],{"class":179},[115,3562,183],{"class":175},[115,3564,186],{"class":171},[115,3566,189],{"class":175},[115,3568,192],{"class":125},[115,3570,195],{"class":175},[115,3572,198],{"class":175},[115,3574,3575,3577,3579,3581,3583,3585,3587,3589,3591],{"class":117,"line":135},[115,3576,172],{"class":171},[115,3578,176],{"class":175},[115,3580,207],{"class":179},[115,3582,183],{"class":175},[115,3584,186],{"class":171},[115,3586,189],{"class":175},[115,3588,216],{"class":125},[115,3590,195],{"class":175},[115,3592,198],{"class":175},[115,3594,3595,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623],{"class":117,"line":223},[115,3596,172],{"class":171},[115,3598,176],{"class":175},[115,3600,230],{"class":179},[115,3602,233],{"class":175},[115,3604,236],{"class":179},[115,3606,233],{"class":175},[115,3608,241],{"class":179},[115,3610,233],{"class":175},[115,3612,246],{"class":179},[115,3614,183],{"class":175},[115,3616,186],{"class":171},[115,3618,189],{"class":175},[115,3620,255],{"class":125},[115,3622,195],{"class":175},[115,3624,198],{"class":175},[115,3626,3627],{"class":117,"line":262},[115,3628,266],{"emptyLinePlaceholder":265},[115,3630,3631,3633,3635,3637,3639,3641,3643],{"class":117,"line":269},[115,3632,272],{"class":175},[115,3634,276],{"class":275},[115,3636,279],{"class":179},[115,3638,195],{"class":175},[115,3640,284],{"class":125},[115,3642,195],{"class":175},[115,3644,289],{"class":179},[115,3646,3647,3649,3651,3653],{"class":117,"line":292},[115,3648,295],{"class":171},[115,3650,299],{"class":298},[115,3652,302],{"class":121},[115,3654,305],{"class":175},[115,3656,3657,3659,3661],{"class":117,"line":308},[115,3658,311],{"class":175},[115,3660,314],{"class":275},[115,3662,317],{"class":179},[115,3664,3665,3667,3669,3671],{"class":117,"line":320},[115,3666,324],{"class":323},[115,3668,327],{"class":175},[115,3670,330],{"class":121},[115,3672,198],{"class":175},[115,3674,3675],{"class":117,"line":335},[115,3676,266],{"emptyLinePlaceholder":265},[115,3678,3679,3681,3683],{"class":117,"line":340},[115,3680,311],{"class":175},[115,3682,345],{"class":275},[115,3684,317],{"class":179},[115,3686,3687,3689,3691,3693],{"class":117,"line":350},[115,3688,353],{"class":323},[115,3690,327],{"class":175},[115,3692,358],{"class":121},[115,3694,198],{"class":175},[115,3696,3697],{"class":117,"line":363},[115,3698,266],{"emptyLinePlaceholder":265},[115,3700,3701,3703,3705,3707,3709,3711,3713,3715,3717],{"class":117,"line":368},[115,3702,311],{"class":175},[115,3704,345],{"class":275},[115,3706,279],{"class":179},[115,3708,377],{"class":175},[115,3710,380],{"class":323},[115,3712,327],{"class":175},[115,3714,386],{"class":385},[115,3716,183],{"class":175},[115,3718,289],{"class":179},[115,3720,3721,3723,3725,3727],{"class":117,"line":393},[115,3722,396],{"class":323},[115,3724,327],{"class":175},[115,3726,358],{"class":121},[115,3728,198],{"class":175},[115,3730,3731],{"class":117,"line":405},[115,3732,266],{"emptyLinePlaceholder":265},[115,3734,3735,3737,3739],{"class":117,"line":410},[115,3736,311],{"class":175},[115,3738,345],{"class":275},[115,3740,317],{"class":179},[115,3742,3743,3745,3747,3749],{"class":117,"line":419},[115,3744,422],{"class":323},[115,3746,327],{"class":175},[115,3748,358],{"class":121},[115,3750,198],{"class":175},[115,3752,3753],{"class":117,"line":431},[115,3754,266],{"emptyLinePlaceholder":265},[115,3756,3757,3759,3761,3763,3765,3767,3769,3771,3773,3775,3777,3779,3781,3783,3785,3787,3789,3791,3793,3795,3797],{"class":117,"line":436},[115,3758,311],{"class":175},[115,3760,345],{"class":275},[115,3762,279],{"class":179},[115,3764,377],{"class":175},[115,3766,447],{"class":323},[115,3768,327],{"class":175},[115,3770,189],{"class":175},[115,3772,454],{"class":125},[115,3774,195],{"class":175},[115,3776,233],{"class":175},[115,3778,461],{"class":323},[115,3780,327],{"class":175},[115,3782,180],{"class":179},[115,3784,233],{"class":175},[115,3786,470],{"class":323},[115,3788,327],{"class":175},[115,3790,180],{"class":179},[115,3792,35],{"class":175},[115,3794,479],{"class":179},[115,3796,482],{"class":175},[115,3798,289],{"class":179},[115,3800,3801,3803,3805,3807],{"class":117,"line":487},[115,3802,490],{"class":323},[115,3804,327],{"class":175},[115,3806,358],{"class":121},[115,3808,198],{"class":175},[115,3810,3811],{"class":117,"line":499},[115,3812,502],{"class":175},[22,3814,3815],{},[15,3816,3817],{},"The UserRole enum is available in the source code. You should take a look at it if you want to see it is implemented",[15,3819,3820,3821,3823],{},"Now let's explore the ",[58,3822,517],{}," content",[105,3825,3826],{"className":162,"code":520,"filename":517,"language":164,"meta":111,"style":111},[58,3827,3828,3848,3884,3888,3904,3914,3922,3932,3936,3956,3966,3970,3990,4000,4004,4036,4044,4054],{"__ignoreMap":111},[115,3829,3830,3832,3834,3836,3838,3840,3842,3844,3846],{"class":117,"line":118},[115,3831,172],{"class":171},[115,3833,176],{"class":175},[115,3835,302],{"class":179},[115,3837,183],{"class":175},[115,3839,186],{"class":171},[115,3841,189],{"class":175},[115,3843,539],{"class":125},[115,3845,195],{"class":175},[115,3847,198],{"class":175},[115,3849,3850,3852,3854,3856,3858,3860,3862,3864,3866,3868,3870,3872,3874,3876,3878,3880,3882],{"class":117,"line":135},[115,3851,172],{"class":171},[115,3853,176],{"class":175},[115,3855,230],{"class":179},[115,3857,233],{"class":175},[115,3859,236],{"class":179},[115,3861,233],{"class":175},[115,3863,560],{"class":179},[115,3865,233],{"class":175},[115,3867,241],{"class":179},[115,3869,233],{"class":175},[115,3871,246],{"class":179},[115,3873,183],{"class":175},[115,3875,186],{"class":171},[115,3877,189],{"class":175},[115,3879,255],{"class":125},[115,3881,195],{"class":175},[115,3883,198],{"class":175},[115,3885,3886],{"class":117,"line":223},[115,3887,266],{"emptyLinePlaceholder":265},[115,3889,3890,3892,3894,3896,3898,3900,3902],{"class":117,"line":262},[115,3891,272],{"class":175},[115,3893,276],{"class":275},[115,3895,279],{"class":179},[115,3897,195],{"class":175},[115,3899,597],{"class":125},[115,3901,195],{"class":175},[115,3903,289],{"class":179},[115,3905,3906,3908,3910,3912],{"class":117,"line":269},[115,3907,295],{"class":171},[115,3909,299],{"class":298},[115,3911,207],{"class":121},[115,3913,305],{"class":175},[115,3915,3916,3918,3920],{"class":117,"line":292},[115,3917,311],{"class":175},[115,3919,314],{"class":275},[115,3921,317],{"class":179},[115,3923,3924,3926,3928,3930],{"class":117,"line":308},[115,3925,324],{"class":323},[115,3927,327],{"class":175},[115,3929,330],{"class":121},[115,3931,198],{"class":175},[115,3933,3934],{"class":117,"line":320},[115,3935,266],{"emptyLinePlaceholder":265},[115,3937,3938,3940,3942,3944,3946,3948,3950,3952,3954],{"class":117,"line":335},[115,3939,311],{"class":175},[115,3941,345],{"class":275},[115,3943,279],{"class":179},[115,3945,377],{"class":175},[115,3947,646],{"class":323},[115,3949,327],{"class":175},[115,3951,386],{"class":385},[115,3953,183],{"class":175},[115,3955,289],{"class":179},[115,3957,3958,3960,3962,3964],{"class":117,"line":340},[115,3959,659],{"class":323},[115,3961,662],{"class":175},[115,3963,358],{"class":121},[115,3965,198],{"class":175},[115,3967,3968],{"class":117,"line":350},[115,3969,266],{"emptyLinePlaceholder":265},[115,3971,3972,3974,3976,3978,3980,3982,3984,3986,3988],{"class":117,"line":363},[115,3973,311],{"class":175},[115,3975,345],{"class":275},[115,3977,279],{"class":179},[115,3979,377],{"class":175},[115,3981,646],{"class":323},[115,3983,327],{"class":175},[115,3985,386],{"class":385},[115,3987,183],{"class":175},[115,3989,289],{"class":179},[115,3991,3992,3994,3996,3998],{"class":117,"line":368},[115,3993,695],{"class":323},[115,3995,662],{"class":175},[115,3997,358],{"class":121},[115,3999,198],{"class":175},[115,4001,4002],{"class":117,"line":393},[115,4003,266],{"emptyLinePlaceholder":265},[115,4005,4006,4008,4010,4012,4014,4016,4018,4020,4022,4024,4026,4028,4030,4032,4034],{"class":117,"line":405},[115,4007,311],{"class":175},[115,4009,712],{"class":275},[115,4011,279],{"class":179},[115,4013,717],{"class":175},[115,4015,720],{"class":298},[115,4017,302],{"class":179},[115,4019,233],{"class":175},[115,4021,727],{"class":175},[115,4023,731],{"class":730},[115,4025,734],{"class":175},[115,4027,720],{"class":298},[115,4029,739],{"class":179},[115,4031,35],{"class":175},[115,4033,744],{"class":179},[115,4035,748],{"class":747},[115,4037,4038,4040,4042],{"class":117,"line":410},[115,4039,311],{"class":175},[115,4041,755],{"class":275},[115,4043,317],{"class":179},[115,4045,4046,4048,4050,4052],{"class":117,"line":419},[115,4047,762],{"class":323},[115,4049,327],{"class":175},[115,4051,302],{"class":121},[115,4053,198],{"class":175},[115,4055,4056],{"class":117,"line":431},[115,4057,502],{"class":175},[15,4059,4060,4061,4063],{},"Above, we used the ",[58,4062,60],{}," decorator. Its argument is a function that returns the class of the entity with which\nwe wish to establish a relationship.",[15,4065,4066,4067,4069],{},"The ",[58,4068,784],{}," decorator specifies that the relationship is owned by the Profile entity. It signifies that the rows\nof the Profile table contain the userId column, which can store a user's id. We only use it on one side of the\nrelationship.",[795,4071,4073],{"id":4072},"bidirectional-relation","Bidirectional relation",[15,4075,4076],{},"Our relationship is currently unidirectional. Meaning that just one side of the relationship knows anything about\nthe other. With TypeORM, relations can be uni-directional and bidirectional. Uni-directional is relations with a\nrelation decorator only on one side. Bidirectional is relations with decorators on both sides of a relation.",[15,4078,4079],{},"We just created a uni-directional relation. Let's make it bidirectional:",[105,4081,4082],{"className":162,"code":807,"filename":517,"language":164,"meta":111,"style":111},[58,4083,4084,4104,4124,4156,4160,4176,4186,4194,4204,4208,4216,4226,4230,4250,4260,4264,4272,4282,4286,4330,4340,4344,4374,4384],{"__ignoreMap":111},[115,4085,4086,4088,4090,4092,4094,4096,4098,4100,4102],{"class":117,"line":118},[115,4087,172],{"class":171},[115,4089,176],{"class":175},[115,4091,180],{"class":179},[115,4093,183],{"class":175},[115,4095,186],{"class":171},[115,4097,189],{"class":175},[115,4099,192],{"class":125},[115,4101,195],{"class":175},[115,4103,198],{"class":175},[115,4105,4106,4108,4110,4112,4114,4116,4118,4120,4122],{"class":117,"line":135},[115,4107,172],{"class":171},[115,4109,176],{"class":175},[115,4111,207],{"class":179},[115,4113,183],{"class":175},[115,4115,186],{"class":171},[115,4117,189],{"class":175},[115,4119,216],{"class":125},[115,4121,195],{"class":175},[115,4123,198],{"class":175},[115,4125,4126,4128,4130,4132,4134,4136,4138,4140,4142,4144,4146,4148,4150,4152,4154],{"class":117,"line":223},[115,4127,172],{"class":171},[115,4129,176],{"class":175},[115,4131,230],{"class":179},[115,4133,233],{"class":175},[115,4135,236],{"class":179},[115,4137,233],{"class":175},[115,4139,241],{"class":179},[115,4141,233],{"class":175},[115,4143,246],{"class":179},[115,4145,183],{"class":175},[115,4147,186],{"class":171},[115,4149,189],{"class":175},[115,4151,255],{"class":125},[115,4153,195],{"class":175},[115,4155,198],{"class":175},[115,4157,4158],{"class":117,"line":262},[115,4159,266],{"emptyLinePlaceholder":265},[115,4161,4162,4164,4166,4168,4170,4172,4174],{"class":117,"line":269},[115,4163,272],{"class":175},[115,4165,276],{"class":275},[115,4167,279],{"class":179},[115,4169,195],{"class":175},[115,4171,284],{"class":125},[115,4173,195],{"class":175},[115,4175,289],{"class":179},[115,4177,4178,4180,4182,4184],{"class":117,"line":292},[115,4179,295],{"class":171},[115,4181,299],{"class":298},[115,4183,302],{"class":121},[115,4185,305],{"class":175},[115,4187,4188,4190,4192],{"class":117,"line":308},[115,4189,311],{"class":175},[115,4191,314],{"class":275},[115,4193,317],{"class":179},[115,4195,4196,4198,4200,4202],{"class":117,"line":320},[115,4197,324],{"class":323},[115,4199,327],{"class":175},[115,4201,330],{"class":121},[115,4203,198],{"class":175},[115,4205,4206],{"class":117,"line":335},[115,4207,266],{"emptyLinePlaceholder":265},[115,4209,4210,4212,4214],{"class":117,"line":340},[115,4211,311],{"class":175},[115,4213,345],{"class":275},[115,4215,317],{"class":179},[115,4217,4218,4220,4222,4224],{"class":117,"line":350},[115,4219,353],{"class":323},[115,4221,327],{"class":175},[115,4223,358],{"class":121},[115,4225,198],{"class":175},[115,4227,4228],{"class":117,"line":363},[115,4229,266],{"emptyLinePlaceholder":265},[115,4231,4232,4234,4236,4238,4240,4242,4244,4246,4248],{"class":117,"line":368},[115,4233,311],{"class":175},[115,4235,345],{"class":275},[115,4237,279],{"class":179},[115,4239,377],{"class":175},[115,4241,380],{"class":323},[115,4243,327],{"class":175},[115,4245,386],{"class":385},[115,4247,183],{"class":175},[115,4249,289],{"class":179},[115,4251,4252,4254,4256,4258],{"class":117,"line":393},[115,4253,396],{"class":323},[115,4255,327],{"class":175},[115,4257,358],{"class":121},[115,4259,198],{"class":175},[115,4261,4262],{"class":117,"line":405},[115,4263,266],{"emptyLinePlaceholder":265},[115,4265,4266,4268,4270],{"class":117,"line":410},[115,4267,311],{"class":175},[115,4269,345],{"class":275},[115,4271,317],{"class":179},[115,4273,4274,4276,4278,4280],{"class":117,"line":419},[115,4275,422],{"class":323},[115,4277,327],{"class":175},[115,4279,358],{"class":121},[115,4281,198],{"class":175},[115,4283,4284],{"class":117,"line":431},[115,4285,266],{"emptyLinePlaceholder":265},[115,4287,4288,4290,4292,4294,4296,4298,4300,4302,4304,4306,4308,4310,4312,4314,4316,4318,4320,4322,4324,4326,4328],{"class":117,"line":436},[115,4289,311],{"class":175},[115,4291,345],{"class":275},[115,4293,279],{"class":179},[115,4295,377],{"class":175},[115,4297,447],{"class":323},[115,4299,327],{"class":175},[115,4301,189],{"class":175},[115,4303,454],{"class":125},[115,4305,195],{"class":175},[115,4307,233],{"class":175},[115,4309,461],{"class":323},[115,4311,327],{"class":175},[115,4313,180],{"class":179},[115,4315,233],{"class":175},[115,4317,470],{"class":323},[115,4319,327],{"class":175},[115,4321,180],{"class":179},[115,4323,35],{"class":175},[115,4325,479],{"class":179},[115,4327,482],{"class":175},[115,4329,289],{"class":179},[115,4331,4332,4334,4336,4338],{"class":117,"line":487},[115,4333,490],{"class":323},[115,4335,327],{"class":175},[115,4337,358],{"class":121},[115,4339,198],{"class":175},[115,4341,4342],{"class":117,"line":499},[115,4343,266],{"emptyLinePlaceholder":265},[115,4345,4346,4348,4350,4352,4354,4356,4358,4360,4362,4364,4366,4368,4370,4372],{"class":117,"line":1072},[115,4347,311],{"class":175},[115,4349,712],{"class":275},[115,4351,279],{"class":179},[115,4353,717],{"class":175},[115,4355,720],{"class":298},[115,4357,207],{"class":179},[115,4359,233],{"class":175},[115,4361,727],{"class":175},[115,4363,1091],{"class":730},[115,4365,734],{"class":175},[115,4367,720],{"class":298},[115,4369,1098],{"class":179},[115,4371,35],{"class":175},[115,4373,1103],{"class":179},[115,4375,4376,4378,4380,4382],{"class":117,"line":1106},[115,4377,1109],{"class":323},[115,4379,327],{"class":175},[115,4381,207],{"class":121},[115,4383,198],{"class":175},[115,4385,4386],{"class":117,"line":1118},[115,4387,502],{"class":175},[22,4389,4390],{},[15,4391,4392],{},"It's worth noting that the inverse relationship is a somewhat abstract idea that does not add any new columns to the\ndatabase.",[15,4394,4395,4396,4398],{},"We just made our relations bidirectional. Note, inverse relation does not have a ",[58,4397,1131],{},". `@JoinColumn must only\nbe on one side of the relation - on the table that will own the foreign key",[795,4400,4402],{"id":4401},"how-to-save-and-retrieve-one-to-one-relation","How to save and retrieve one-to-one relation",[105,4404,4405],{"className":162,"code":1142,"filename":1143,"language":164,"meta":111,"style":111},[58,4406,4407,4435,4455,4475,4495,4515,4535,4555,4575,4579,4587,4597,4603,4625,4647,4653,4657,4661,4679,4707,4711,4715,4731,4749,4767,4781,4785,4807,4811,4833,4837,4841,4859,4881,4893,4911,4919,4923,4961,4965,4973,4977],{"__ignoreMap":111},[115,4408,4409,4411,4413,4415,4417,4419,4421,4423,4425,4427,4429,4431,4433],{"class":117,"line":118},[115,4410,172],{"class":171},[115,4412,176],{"class":175},[115,4414,1154],{"class":179},[115,4416,233],{"class":175},[115,4418,1159],{"class":179},[115,4420,233],{"class":175},[115,4422,1164],{"class":179},[115,4424,183],{"class":175},[115,4426,186],{"class":171},[115,4428,189],{"class":175},[115,4430,1173],{"class":125},[115,4432,195],{"class":175},[115,4434,198],{"class":175},[115,4436,4437,4439,4441,4443,4445,4447,4449,4451,4453],{"class":117,"line":135},[115,4438,172],{"class":171},[115,4440,176],{"class":175},[115,4442,1186],{"class":179},[115,4444,183],{"class":175},[115,4446,186],{"class":171},[115,4448,189],{"class":175},[115,4450,1195],{"class":125},[115,4452,195],{"class":175},[115,4454,198],{"class":175},[115,4456,4457,4459,4461,4463,4465,4467,4469,4471,4473],{"class":117,"line":223},[115,4458,172],{"class":171},[115,4460,176],{"class":175},[115,4462,1208],{"class":179},[115,4464,183],{"class":175},[115,4466,186],{"class":171},[115,4468,189],{"class":175},[115,4470,1217],{"class":125},[115,4472,195],{"class":175},[115,4474,198],{"class":175},[115,4476,4477,4479,4481,4483,4485,4487,4489,4491,4493],{"class":117,"line":262},[115,4478,172],{"class":171},[115,4480,176],{"class":175},[115,4482,1230],{"class":179},[115,4484,183],{"class":175},[115,4486,186],{"class":171},[115,4488,189],{"class":175},[115,4490,1239],{"class":125},[115,4492,195],{"class":175},[115,4494,198],{"class":175},[115,4496,4497,4499,4501,4503,4505,4507,4509,4511,4513],{"class":117,"line":269},[115,4498,172],{"class":171},[115,4500,176],{"class":175},[115,4502,1252],{"class":179},[115,4504,183],{"class":175},[115,4506,186],{"class":171},[115,4508,189],{"class":175},[115,4510,255],{"class":125},[115,4512,195],{"class":175},[115,4514,198],{"class":175},[115,4516,4517,4519,4521,4523,4525,4527,4529,4531,4533],{"class":117,"line":292},[115,4518,172],{"class":171},[115,4520,176],{"class":175},[115,4522,302],{"class":179},[115,4524,183],{"class":175},[115,4526,186],{"class":171},[115,4528,189],{"class":175},[115,4530,1281],{"class":125},[115,4532,195],{"class":175},[115,4534,198],{"class":175},[115,4536,4537,4539,4541,4543,4545,4547,4549,4551,4553],{"class":117,"line":308},[115,4538,172],{"class":171},[115,4540,176],{"class":175},[115,4542,207],{"class":179},[115,4544,183],{"class":175},[115,4546,186],{"class":171},[115,4548,189],{"class":175},[115,4550,216],{"class":125},[115,4552,195],{"class":175},[115,4554,198],{"class":175},[115,4556,4557,4559,4561,4563,4565,4567,4569,4571,4573],{"class":117,"line":320},[115,4558,172],{"class":171},[115,4560,176],{"class":175},[115,4562,1314],{"class":179},[115,4564,183],{"class":175},[115,4566,186],{"class":171},[115,4568,189],{"class":175},[115,4570,1323],{"class":125},[115,4572,195],{"class":175},[115,4574,198],{"class":175},[115,4576,4577],{"class":117,"line":335},[115,4578,266],{"emptyLinePlaceholder":265},[115,4580,4581,4583,4585],{"class":117,"line":340},[115,4582,272],{"class":175},[115,4584,1338],{"class":275},[115,4586,317],{"class":179},[115,4588,4589,4591,4593,4595],{"class":117,"line":350},[115,4590,295],{"class":171},[115,4592,299],{"class":298},[115,4594,1349],{"class":121},[115,4596,305],{"class":175},[115,4598,4599,4601],{"class":117,"line":363},[115,4600,1356],{"class":298},[115,4602,1359],{"class":175},[115,4604,4605,4607,4609,4611,4613,4615,4617,4619,4621,4623],{"class":117,"line":368},[115,4606,1364],{"class":175},[115,4608,1367],{"class":275},[115,4610,1370],{"class":179},[115,4612,1373],{"class":298},[115,4614,1376],{"class":730},[115,4616,327],{"class":175},[115,4618,1252],{"class":121},[115,4620,1383],{"class":175},[115,4622,96],{"class":121},[115,4624,1388],{"class":175},[115,4626,4627,4629,4631,4633,4635,4637,4639,4641,4643,4645],{"class":117,"line":393},[115,4628,1364],{"class":175},[115,4630,1367],{"class":275},[115,4632,1397],{"class":179},[115,4634,1373],{"class":298},[115,4636,1402],{"class":730},[115,4638,327],{"class":175},[115,4640,1252],{"class":121},[115,4642,1383],{"class":175},[115,4644,99],{"class":121},[115,4646,1388],{"class":175},[115,4648,4649,4651],{"class":117,"line":405},[115,4650,1417],{"class":175},[115,4652,305],{"class":175},[115,4654,4655],{"class":117,"line":410},[115,4656,1424],{"class":175},[115,4658,4659],{"class":117,"line":419},[115,4660,266],{"emptyLinePlaceholder":265},[115,4662,4663,4665,4667,4669,4671,4673,4675,4677],{"class":117,"line":431},[115,4664,1433],{"class":298},[115,4666,1436],{"class":323},[115,4668,279],{"class":175},[115,4670,1441],{"class":730},[115,4672,327],{"class":175},[115,4674,1186],{"class":121},[115,4676,734],{"class":175},[115,4678,305],{"class":175},[115,4680,4681,4683,4685,4687,4689,4691,4693,4695,4697,4699,4701,4703,4705],{"class":117,"line":436},[115,4682,1454],{"class":298},[115,4684,739],{"class":179},[115,4686,1459],{"class":175},[115,4688,1462],{"class":171},[115,4690,1465],{"class":175},[115,4692,1468],{"class":179},[115,4694,35],{"class":175},[115,4696,1473],{"class":275},[115,4698,279],{"class":323},[115,4700,1441],{"class":179},[115,4702,734],{"class":323},[115,4704,1482],{"class":175},[115,4706,1485],{"class":747},[115,4708,4709],{"class":117,"line":487},[115,4710,266],{"emptyLinePlaceholder":265},[115,4712,4713],{"class":117,"line":499},[115,4714,1494],{"class":747},[115,4716,4717,4719,4721,4723,4725,4727,4729],{"class":117,"line":1072},[115,4718,1454],{"class":298},[115,4720,1098],{"class":179},[115,4722,1459],{"class":175},[115,4724,1505],{"class":175},[115,4726,207],{"class":275},[115,4728,717],{"class":323},[115,4730,198],{"class":175},[115,4732,4733,4735,4737,4739,4741,4743,4745,4747],{"class":117,"line":1106},[115,4734,1516],{"class":179},[115,4736,35],{"class":175},[115,4738,1521],{"class":179},[115,4740,1459],{"class":175},[115,4742,1526],{"class":179},[115,4744,35],{"class":175},[115,4746,1521],{"class":179},[115,4748,198],{"class":175},[115,4750,4751,4753,4755,4757,4759,4761,4763,4765],{"class":117,"line":1118},[115,4752,1516],{"class":179},[115,4754,35],{"class":175},[115,4756,1541],{"class":179},[115,4758,1459],{"class":175},[115,4760,1526],{"class":179},[115,4762,35],{"class":175},[115,4764,1541],{"class":179},[115,4766,198],{"class":175},[115,4768,4769,4771,4773,4775,4777,4779],{"class":117,"line":1554},[115,4770,1516],{"class":179},[115,4772,35],{"class":175},[115,4774,731],{"class":179},[115,4776,1459],{"class":175},[115,4778,739],{"class":179},[115,4780,198],{"class":175},[115,4782,4783],{"class":117,"line":1569},[115,4784,266],{"emptyLinePlaceholder":265},[115,4786,4787,4789,4791,4793,4795,4797,4799,4801,4803,4805],{"class":117,"line":1574},[115,4788,1577],{"class":171},[115,4790,1465],{"class":175},[115,4792,1582],{"class":179},[115,4794,35],{"class":175},[115,4796,1473],{"class":275},[115,4798,279],{"class":323},[115,4800,1091],{"class":179},[115,4802,734],{"class":323},[115,4804,1482],{"class":175},[115,4806,1597],{"class":747},[115,4808,4809],{"class":117,"line":1600},[115,4810,266],{"emptyLinePlaceholder":265},[115,4812,4813,4815,4817,4819,4821,4823,4825,4827,4829,4831],{"class":117,"line":1605},[115,4814,1608],{"class":171},[115,4816,1465],{"class":175},[115,4818,1613],{"class":275},[115,4820,279],{"class":323},[115,4822,731],{"class":179},[115,4824,35],{"class":175},[115,4826,792],{"class":179},[115,4828,734],{"class":323},[115,4830,1482],{"class":175},[115,4832,1628],{"class":747},[115,4834,4835],{"class":117,"line":1631},[115,4836,1424],{"class":175},[115,4838,4839],{"class":117,"line":1636},[115,4840,266],{"emptyLinePlaceholder":265},[115,4842,4843,4845,4847,4849,4851,4853,4855,4857],{"class":117,"line":1641},[115,4844,1433],{"class":298},[115,4846,1646],{"class":323},[115,4848,279],{"class":175},[115,4850,792],{"class":730},[115,4852,327],{"class":175},[115,4854,330],{"class":121},[115,4856,734],{"class":175},[115,4858,305],{"class":175},[115,4860,4861,4863,4865,4867,4869,4871,4873,4875,4877,4879],{"class":117,"line":1661},[115,4862,1454],{"class":298},[115,4864,739],{"class":179},[115,4866,1459],{"class":175},[115,4868,1462],{"class":171},[115,4870,1465],{"class":175},[115,4872,1468],{"class":179},[115,4874,35],{"class":175},[115,4876,1613],{"class":275},[115,4878,279],{"class":323},[115,4880,1682],{"class":175},[115,4882,4883,4885,4887,4889,4891],{"class":117,"line":1685},[115,4884,1688],{"class":323},[115,4886,327],{"class":175},[115,4888,176],{"class":175},[115,4890,1695],{"class":179},[115,4892,1698],{"class":175},[115,4894,4895,4897,4899,4901,4903,4905,4907,4909],{"class":117,"line":1701},[115,4896,1704],{"class":323},[115,4898,327],{"class":175},[115,4900,176],{"class":175},[115,4902,1098],{"class":323},[115,4904,327],{"class":175},[115,4906,386],{"class":385},[115,4908,1717],{"class":175},[115,4910,1720],{"class":747},[115,4912,4913,4915,4917],{"class":117,"line":1723},[115,4914,1726],{"class":175},[115,4916,734],{"class":323},[115,4918,198],{"class":175},[115,4920,4921],{"class":117,"line":1733},[115,4922,266],{"emptyLinePlaceholder":265},[115,4924,4925,4927,4929,4931,4933,4935,4937,4939,4941,4943,4945,4947,4949,4951,4953,4955,4957,4959],{"class":117,"line":1738},[115,4926,1741],{"class":171},[115,4928,727],{"class":323},[115,4930,1746],{"class":175},[115,4932,731],{"class":179},[115,4934,1751],{"class":323},[115,4936,1754],{"class":171},[115,4938,1505],{"class":175},[115,4940,1154],{"class":275},[115,4942,279],{"class":323},[115,4944,195],{"class":175},[115,4946,1765],{"class":125},[115,4948,195],{"class":175},[115,4950,233],{"class":175},[115,4952,1159],{"class":179},[115,4954,35],{"class":175},[115,4956,1776],{"class":179},[115,4958,734],{"class":323},[115,4960,198],{"class":175},[115,4962,4963],{"class":117,"line":1783},[115,4964,266],{"emptyLinePlaceholder":265},[115,4966,4967,4969,4971],{"class":117,"line":1788},[115,4968,1608],{"class":171},[115,4970,739],{"class":179},[115,4972,198],{"class":175},[115,4974,4975],{"class":117,"line":1797},[115,4976,1424],{"class":175},[115,4978,4979],{"class":117,"line":1802},[115,4980,502],{"class":175},[10,4982,4984],{"id":4983},"many-to-one-one-to-many-relations","Many-To-One \u002F One-To-Many Relations",[15,4986,4987],{},"Many-to-one \u002F one-to-many is a relation where A contains multiple instances of B, but B contains only one instance of A.\nLet's take for example User and Order entities. A user can have multiple orders, but each order is owned by only one\nsingle user.",[15,4989,4990],{},"Let's quickly set up orders REST API resource.",[105,4992,4993],{"className":107,"code":1823,"filename":109,"language":110,"meta":111,"style":111},[58,4994,4995],{"__ignoreMap":111},[115,4996,4997,4999,5001,5003],{"class":117,"line":118},[115,4998,122],{"class":121},[115,5000,126],{"class":125},[115,5002,129],{"class":125},[115,5004,1836],{"class":125},[105,5006,5007],{"className":162,"code":1839,"filename":158,"language":164,"meta":111,"style":111},[58,5008,5009,5029,5033,5049,5059,5063,5093,5105],{"__ignoreMap":111},[115,5010,5011,5013,5015,5017,5019,5021,5023,5025,5027],{"class":117,"line":118},[115,5012,172],{"class":171},[115,5014,176],{"class":175},[115,5016,1850],{"class":179},[115,5018,183],{"class":175},[115,5020,186],{"class":171},[115,5022,189],{"class":175},[115,5024,1859],{"class":125},[115,5026,195],{"class":175},[115,5028,198],{"class":175},[115,5030,5031],{"class":117,"line":135},[115,5032,266],{"emptyLinePlaceholder":265},[115,5034,5035,5037,5039,5041,5043,5045,5047],{"class":117,"line":223},[115,5036,272],{"class":175},[115,5038,276],{"class":275},[115,5040,279],{"class":179},[115,5042,195],{"class":175},[115,5044,284],{"class":125},[115,5046,195],{"class":175},[115,5048,289],{"class":179},[115,5050,5051,5053,5055,5057],{"class":117,"line":262},[115,5052,295],{"class":171},[115,5054,299],{"class":298},[115,5056,302],{"class":121},[115,5058,305],{"class":175},[115,5060,5061],{"class":117,"line":269},[115,5062,1898],{"class":747},[115,5064,5065,5067,5069,5071,5073,5075,5077,5079,5081,5083,5085,5087,5089,5091],{"class":117,"line":292},[115,5066,311],{"class":175},[115,5068,1905],{"class":275},[115,5070,279],{"class":179},[115,5072,717],{"class":175},[115,5074,720],{"class":298},[115,5076,1850],{"class":179},[115,5078,233],{"class":175},[115,5080,727],{"class":175},[115,5082,1920],{"class":730},[115,5084,734],{"class":175},[115,5086,720],{"class":298},[115,5088,1927],{"class":179},[115,5090,35],{"class":175},[115,5092,1103],{"class":179},[115,5094,5095,5097,5099,5101,5103],{"class":117,"line":308},[115,5096,1936],{"class":323},[115,5098,327],{"class":175},[115,5100,1850],{"class":121},[115,5102,1943],{"class":179},[115,5104,198],{"class":175},[115,5106,5107],{"class":117,"line":320},[115,5108,502],{"class":175},[105,5110,5111],{"className":162,"code":1952,"filename":1953,"language":164,"meta":111,"style":111},[58,5112,5113,5133,5153,5189,5193,5209,5219,5227,5237,5241,5285,5297,5301,5309,5319,5323,5353,5363,5367,5375,5385],{"__ignoreMap":111},[115,5114,5115,5117,5119,5121,5123,5125,5127,5129,5131],{"class":117,"line":118},[115,5116,172],{"class":171},[115,5118,176],{"class":175},[115,5120,1964],{"class":179},[115,5122,183],{"class":175},[115,5124,186],{"class":171},[115,5126,189],{"class":175},[115,5128,1973],{"class":125},[115,5130,195],{"class":175},[115,5132,198],{"class":175},[115,5134,5135,5137,5139,5141,5143,5145,5147,5149,5151],{"class":117,"line":135},[115,5136,172],{"class":171},[115,5138,176],{"class":175},[115,5140,302],{"class":179},[115,5142,183],{"class":175},[115,5144,186],{"class":171},[115,5146,189],{"class":175},[115,5148,539],{"class":125},[115,5150,195],{"class":175},[115,5152,198],{"class":175},[115,5154,5155,5157,5159,5161,5163,5165,5167,5169,5171,5173,5175,5177,5179,5181,5183,5185,5187],{"class":117,"line":223},[115,5156,172],{"class":171},[115,5158,176],{"class":175},[115,5160,230],{"class":179},[115,5162,233],{"class":175},[115,5164,2010],{"class":179},[115,5166,233],{"class":175},[115,5168,236],{"class":179},[115,5170,233],{"class":175},[115,5172,2019],{"class":179},[115,5174,233],{"class":175},[115,5176,246],{"class":179},[115,5178,183],{"class":175},[115,5180,186],{"class":171},[115,5182,189],{"class":175},[115,5184,255],{"class":125},[115,5186,195],{"class":175},[115,5188,198],{"class":175},[115,5190,5191],{"class":117,"line":262},[115,5192,266],{"emptyLinePlaceholder":265},[115,5194,5195,5197,5199,5201,5203,5205,5207],{"class":117,"line":269},[115,5196,272],{"class":175},[115,5198,276],{"class":275},[115,5200,279],{"class":179},[115,5202,195],{"class":175},[115,5204,2052],{"class":125},[115,5206,195],{"class":175},[115,5208,289],{"class":179},[115,5210,5211,5213,5215,5217],{"class":117,"line":292},[115,5212,295],{"class":171},[115,5214,299],{"class":298},[115,5216,1850],{"class":121},[115,5218,305],{"class":175},[115,5220,5221,5223,5225],{"class":117,"line":308},[115,5222,311],{"class":175},[115,5224,314],{"class":275},[115,5226,317],{"class":179},[115,5228,5229,5231,5233,5235],{"class":117,"line":320},[115,5230,324],{"class":323},[115,5232,327],{"class":175},[115,5234,330],{"class":121},[115,5236,198],{"class":175},[115,5238,5239],{"class":117,"line":335},[115,5240,266],{"emptyLinePlaceholder":265},[115,5242,5243,5245,5247,5249,5251,5253,5255,5257,5259,5261,5263,5265,5267,5269,5271,5273,5275,5277,5279,5281,5283],{"class":117,"line":340},[115,5244,311],{"class":175},[115,5246,345],{"class":275},[115,5248,279],{"class":179},[115,5250,377],{"class":175},[115,5252,447],{"class":323},[115,5254,327],{"class":175},[115,5256,189],{"class":175},[115,5258,454],{"class":125},[115,5260,195],{"class":175},[115,5262,233],{"class":175},[115,5264,461],{"class":323},[115,5266,327],{"class":175},[115,5268,1964],{"class":179},[115,5270,233],{"class":175},[115,5272,470],{"class":323},[115,5274,327],{"class":175},[115,5276,1964],{"class":179},[115,5278,35],{"class":175},[115,5280,2129],{"class":179},[115,5282,482],{"class":175},[115,5284,289],{"class":179},[115,5286,5287,5289,5291,5293,5295],{"class":117,"line":350},[115,5288,2138],{"class":323},[115,5290,327],{"class":175},[115,5292,358],{"class":121},[115,5294,1482],{"class":175},[115,5296,2147],{"class":747},[115,5298,5299],{"class":117,"line":363},[115,5300,266],{"emptyLinePlaceholder":265},[115,5302,5303,5305,5307],{"class":117,"line":368},[115,5304,311],{"class":175},[115,5306,345],{"class":275},[115,5308,317],{"class":179},[115,5310,5311,5313,5315,5317],{"class":117,"line":393},[115,5312,2164],{"class":323},[115,5314,327],{"class":175},[115,5316,330],{"class":121},[115,5318,198],{"class":175},[115,5320,5321],{"class":117,"line":405},[115,5322,266],{"emptyLinePlaceholder":265},[115,5324,5325,5327,5329,5331,5333,5335,5337,5339,5341,5343,5345,5347,5349,5351],{"class":117,"line":410},[115,5326,311],{"class":175},[115,5328,2181],{"class":275},[115,5330,279],{"class":179},[115,5332,717],{"class":175},[115,5334,720],{"class":298},[115,5336,302],{"class":179},[115,5338,233],{"class":175},[115,5340,727],{"class":175},[115,5342,731],{"class":730},[115,5344,734],{"class":175},[115,5346,720],{"class":298},[115,5348,739],{"class":179},[115,5350,35],{"class":175},[115,5352,2206],{"class":179},[115,5354,5355,5357,5359,5361],{"class":117,"line":419},[115,5356,762],{"class":323},[115,5358,327],{"class":175},[115,5360,302],{"class":121},[115,5362,198],{"class":175},[115,5364,5365],{"class":117,"line":431},[115,5366,266],{"emptyLinePlaceholder":265},[115,5368,5369,5371,5373],{"class":117,"line":436},[115,5370,311],{"class":175},[115,5372,2227],{"class":275},[115,5374,317],{"class":179},[115,5376,5377,5379,5381,5383],{"class":117,"line":487},[115,5378,2234],{"class":323},[115,5380,662],{"class":175},[115,5382,2239],{"class":121},[115,5384,198],{"class":175},[115,5386,5387],{"class":117,"line":499},[115,5388,502],{"class":175},[15,5390,5391,5392,5394,5395,2256,5397,5399,5400,1132,5402,5404,5405,1132,5407,5409,5410,5412,5413,5415,5416,5418,5419,5421],{},"We added ",[58,5393,2251],{}," to orders property and set Order as the target relation type. In a ",[58,5396,2255],{},[58,5398,2251],{},"\nrelation, you can omit ",[58,5401,1131],{},[58,5403,2255],{}," cannot exist without ",[58,5406,2251],{},[58,5408,2255],{}," is required if you\nwant to use ",[58,5411,2251],{},". However, if you only care about the ",[58,5414,2255],{}," relationship, you can define it without\nhaving ",[58,5417,2251],{}," on the associated entity. Wherever ",[58,5420,2255],{}," is configured, its linked entity will have a\n\"relation id\" and a foreign key.",[795,5423,5425],{"id":5424},"how-to-save-and-retrieve-one-to-manymany-to-one-relation","How to save and retrieve one-to-many\u002Fmany-to-one relation",[15,5427,5428],{},"Let me show the full order service that implements an order crud",[105,5430,5431],{"className":162,"code":2292,"filename":2293,"language":164,"meta":111,"style":111},[58,5432,5433,5453,5473,5493,5513,5533,5553,5573,5577,5585,5595,5601,5609,5627,5641,5647,5651,5655,5681,5707,5711,5727,5745,5759,5763,5785,5789,5793,5821,5847,5865,5877,5885,5889,5893,5923,5949,5953],{"__ignoreMap":111},[115,5434,5435,5437,5439,5441,5443,5445,5447,5449,5451],{"class":117,"line":118},[115,5436,172],{"class":171},[115,5438,176],{"class":175},[115,5440,1164],{"class":179},[115,5442,183],{"class":175},[115,5444,186],{"class":171},[115,5446,189],{"class":175},[115,5448,1173],{"class":125},[115,5450,195],{"class":175},[115,5452,198],{"class":175},[115,5454,5455,5457,5459,5461,5463,5465,5467,5469,5471],{"class":117,"line":135},[115,5456,172],{"class":171},[115,5458,176],{"class":175},[115,5460,2324],{"class":179},[115,5462,183],{"class":175},[115,5464,186],{"class":171},[115,5466,189],{"class":175},[115,5468,2333],{"class":125},[115,5470,195],{"class":175},[115,5472,198],{"class":175},[115,5474,5475,5477,5479,5481,5483,5485,5487,5489,5491],{"class":117,"line":223},[115,5476,172],{"class":171},[115,5478,176],{"class":175},[115,5480,2346],{"class":179},[115,5482,183],{"class":175},[115,5484,186],{"class":171},[115,5486,189],{"class":175},[115,5488,2355],{"class":125},[115,5490,195],{"class":175},[115,5492,198],{"class":175},[115,5494,5495,5497,5499,5501,5503,5505,5507,5509,5511],{"class":117,"line":262},[115,5496,172],{"class":171},[115,5498,176],{"class":175},[115,5500,1230],{"class":179},[115,5502,183],{"class":175},[115,5504,186],{"class":171},[115,5506,189],{"class":175},[115,5508,1239],{"class":125},[115,5510,195],{"class":175},[115,5512,198],{"class":175},[115,5514,5515,5517,5519,5521,5523,5525,5527,5529,5531],{"class":117,"line":269},[115,5516,172],{"class":171},[115,5518,176],{"class":175},[115,5520,1850],{"class":179},[115,5522,183],{"class":175},[115,5524,186],{"class":171},[115,5526,189],{"class":175},[115,5528,2396],{"class":125},[115,5530,195],{"class":175},[115,5532,198],{"class":175},[115,5534,5535,5537,5539,5541,5543,5545,5547,5549,5551],{"class":117,"line":292},[115,5536,172],{"class":171},[115,5538,176],{"class":175},[115,5540,1252],{"class":179},[115,5542,183],{"class":175},[115,5544,186],{"class":171},[115,5546,189],{"class":175},[115,5548,255],{"class":125},[115,5550,195],{"class":175},[115,5552,198],{"class":175},[115,5554,5555,5557,5559,5561,5563,5565,5567,5569,5571],{"class":117,"line":308},[115,5556,172],{"class":171},[115,5558,176],{"class":175},[115,5560,1349],{"class":179},[115,5562,183],{"class":175},[115,5564,186],{"class":171},[115,5566,189],{"class":175},[115,5568,2437],{"class":125},[115,5570,195],{"class":175},[115,5572,198],{"class":175},[115,5574,5575],{"class":117,"line":320},[115,5576,266],{"emptyLinePlaceholder":265},[115,5578,5579,5581,5583],{"class":117,"line":335},[115,5580,272],{"class":175},[115,5582,1338],{"class":275},[115,5584,317],{"class":179},[115,5586,5587,5589,5591,5593],{"class":117,"line":340},[115,5588,295],{"class":171},[115,5590,299],{"class":298},[115,5592,2462],{"class":121},[115,5594,305],{"class":175},[115,5596,5597,5599],{"class":117,"line":350},[115,5598,1356],{"class":298},[115,5600,1359],{"class":175},[115,5602,5603,5605,5607],{"class":117,"line":363},[115,5604,1364],{"class":175},[115,5606,1367],{"class":275},[115,5608,2479],{"class":179},[115,5610,5611,5613,5615,5617,5619,5621,5623,5625],{"class":117,"line":368},[115,5612,2484],{"class":298},[115,5614,2487],{"class":298},[115,5616,2490],{"class":730},[115,5618,327],{"class":175},[115,5620,1252],{"class":121},[115,5622,1383],{"class":175},[115,5624,1816],{"class":121},[115,5626,1388],{"class":175},[115,5628,5629,5631,5633,5635,5637,5639],{"class":117,"line":393},[115,5630,2484],{"class":298},[115,5632,2487],{"class":298},[115,5634,2509],{"class":730},[115,5636,327],{"class":175},[115,5638,1349],{"class":121},[115,5640,2516],{"class":175},[115,5642,5643,5645],{"class":117,"line":405},[115,5644,1417],{"class":175},[115,5646,305],{"class":175},[115,5648,5649],{"class":117,"line":410},[115,5650,1424],{"class":175},[115,5652,5653],{"class":117,"line":419},[115,5654,266],{"emptyLinePlaceholder":265},[115,5656,5657,5659,5661,5663,5665,5667,5669,5671,5673,5675,5677,5679],{"class":117,"line":431},[115,5658,1433],{"class":298},[115,5660,1436],{"class":323},[115,5662,279],{"class":175},[115,5664,788],{"class":730},[115,5666,327],{"class":175},[115,5668,330],{"class":121},[115,5670,233],{"class":175},[115,5672,2549],{"class":730},[115,5674,327],{"class":175},[115,5676,2324],{"class":121},[115,5678,734],{"class":175},[115,5680,305],{"class":175},[115,5682,5683,5685,5687,5689,5691,5693,5695,5697,5699,5701,5703,5705],{"class":117,"line":436},[115,5684,1454],{"class":298},[115,5686,739],{"class":179},[115,5688,1459],{"class":175},[115,5690,1462],{"class":171},[115,5692,1465],{"class":175},[115,5694,2572],{"class":179},[115,5696,35],{"class":175},[115,5698,1613],{"class":275},[115,5700,279],{"class":323},[115,5702,788],{"class":179},[115,5704,734],{"class":323},[115,5706,198],{"class":175},[115,5708,5709],{"class":117,"line":487},[115,5710,266],{"emptyLinePlaceholder":265},[115,5712,5713,5715,5717,5719,5721,5723,5725],{"class":117,"line":499},[115,5714,1454],{"class":298},[115,5716,1927],{"class":179},[115,5718,1459],{"class":175},[115,5720,1505],{"class":175},[115,5722,1850],{"class":275},[115,5724,717],{"class":323},[115,5726,198],{"class":175},[115,5728,5729,5731,5733,5735,5737,5739,5741,5743],{"class":117,"line":1072},[115,5730,2609],{"class":179},[115,5732,35],{"class":175},[115,5734,2614],{"class":179},[115,5736,1459],{"class":175},[115,5738,2549],{"class":179},[115,5740,35],{"class":175},[115,5742,2614],{"class":179},[115,5744,198],{"class":175},[115,5746,5747,5749,5751,5753,5755,5757],{"class":117,"line":1106},[115,5748,2609],{"class":179},[115,5750,35],{"class":175},[115,5752,731],{"class":179},[115,5754,1459],{"class":175},[115,5756,739],{"class":179},[115,5758,198],{"class":175},[115,5760,5761],{"class":117,"line":1118},[115,5762,266],{"emptyLinePlaceholder":265},[115,5764,5765,5767,5769,5771,5773,5775,5777,5779,5781,5783],{"class":117,"line":1554},[115,5766,1608],{"class":171},[115,5768,1462],{"class":171},[115,5770,1465],{"class":175},[115,5772,2653],{"class":179},[115,5774,35],{"class":175},[115,5776,1473],{"class":275},[115,5778,279],{"class":323},[115,5780,1920],{"class":179},[115,5782,734],{"class":323},[115,5784,198],{"class":175},[115,5786,5787],{"class":117,"line":1569},[115,5788,1424],{"class":175},[115,5790,5791],{"class":117,"line":1574},[115,5792,266],{"emptyLinePlaceholder":265},[115,5794,5795,5797,5799,5801,5803,5805,5807,5809,5811,5813,5815,5817,5819],{"class":117,"line":1600},[115,5796,1433],{"class":298},[115,5798,2680],{"class":323},[115,5800,279],{"class":175},[115,5802,788],{"class":730},[115,5804,327],{"class":175},[115,5806,330],{"class":121},[115,5808,2691],{"class":175},[115,5810,2694],{"class":121},[115,5812,1383],{"class":175},[115,5814,1816],{"class":121},[115,5816,1943],{"class":179},[115,5818,2703],{"class":175},[115,5820,305],{"class":175},[115,5822,5823,5825,5827,5829,5831,5833,5835,5837,5839,5841,5843,5845],{"class":117,"line":1605},[115,5824,1454],{"class":298},[115,5826,739],{"class":179},[115,5828,1459],{"class":175},[115,5830,1462],{"class":171},[115,5832,1465],{"class":175},[115,5834,2572],{"class":179},[115,5836,35],{"class":175},[115,5838,1613],{"class":275},[115,5840,279],{"class":323},[115,5842,788],{"class":179},[115,5844,734],{"class":323},[115,5846,198],{"class":175},[115,5848,5849,5851,5853,5855,5857,5859,5861,5863],{"class":117,"line":1631},[115,5850,1608],{"class":171},[115,5852,1462],{"class":171},[115,5854,1465],{"class":175},[115,5856,2653],{"class":179},[115,5858,35],{"class":175},[115,5860,2746],{"class":275},[115,5862,279],{"class":323},[115,5864,1682],{"class":175},[115,5866,5867,5869,5871,5873,5875],{"class":117,"line":1636},[115,5868,1688],{"class":323},[115,5870,327],{"class":175},[115,5872,176],{"class":175},[115,5874,739],{"class":179},[115,5876,1698],{"class":175},[115,5878,5879,5881,5883],{"class":117,"line":1641},[115,5880,1726],{"class":175},[115,5882,734],{"class":323},[115,5884,198],{"class":175},[115,5886,5887],{"class":117,"line":1661},[115,5888,1424],{"class":175},[115,5890,5891],{"class":117,"line":1685},[115,5892,266],{"emptyLinePlaceholder":265},[115,5894,5895,5897,5899,5901,5903,5905,5907,5909,5911,5913,5915,5917,5919,5921],{"class":117,"line":1701},[115,5896,1433],{"class":298},[115,5898,1646],{"class":323},[115,5900,279],{"class":175},[115,5902,792],{"class":730},[115,5904,327],{"class":175},[115,5906,330],{"class":121},[115,5908,2691],{"class":175},[115,5910,2694],{"class":121},[115,5912,1383],{"class":175},[115,5914,1816],{"class":121},[115,5916,2803],{"class":175},[115,5918,2806],{"class":121},[115,5920,2703],{"class":175},[115,5922,305],{"class":175},[115,5924,5925,5927,5929,5931,5933,5935,5937,5939,5941,5943,5945,5947],{"class":117,"line":1723},[115,5926,1608],{"class":171},[115,5928,1462],{"class":171},[115,5930,1465],{"class":175},[115,5932,2653],{"class":179},[115,5934,35],{"class":175},[115,5936,2825],{"class":275},[115,5938,279],{"class":323},[115,5940,377],{"class":175},[115,5942,1695],{"class":179},[115,5944,183],{"class":175},[115,5946,734],{"class":323},[115,5948,198],{"class":175},[115,5950,5951],{"class":117,"line":1733},[115,5952,1424],{"class":175},[115,5954,5955],{"class":117,"line":1738},[115,5956,502],{"class":175},[10,5958,5960],{"id":5959},"many-to-many-relations","Many-To-Many relations",[15,5962,5963],{},"Many-to-many is a relationship in which entity A contains multiple instances of entity B, and vice versa. For example,\nlet's consider the entities 'Product' and 'Order.' An order can include multiple products, and each product can belong\nto multiple orders.",[15,5965,5966,5967,3823],{},"Let's explore the ",[58,5968,517],{},[105,5970,5971],{"className":162,"code":2866,"filename":1953,"language":164,"meta":111,"style":111},[58,5972,5973,5993,6017,6021,6037,6047,6051,6055,6059,6073,6085],{"__ignoreMap":111},[115,5974,5975,5977,5979,5981,5983,5985,5987,5989,5991],{"class":117,"line":118},[115,5976,172],{"class":171},[115,5978,176],{"class":175},[115,5980,2877],{"class":179},[115,5982,183],{"class":175},[115,5984,186],{"class":171},[115,5986,189],{"class":175},[115,5988,2886],{"class":125},[115,5990,195],{"class":175},[115,5992,198],{"class":175},[115,5994,5995,5997,5999,6001,6003,6005,6007,6009,6011,6013,6015],{"class":117,"line":135},[115,5996,172],{"class":171},[115,5998,176],{"class":175},[115,6000,2899],{"class":179},[115,6002,233],{"class":175},[115,6004,2904],{"class":179},[115,6006,183],{"class":175},[115,6008,186],{"class":171},[115,6010,189],{"class":175},[115,6012,255],{"class":125},[115,6014,195],{"class":175},[115,6016,198],{"class":175},[115,6018,6019],{"class":117,"line":223},[115,6020,266],{"emptyLinePlaceholder":265},[115,6022,6023,6025,6027,6029,6031,6033,6035],{"class":117,"line":262},[115,6024,272],{"class":175},[115,6026,276],{"class":275},[115,6028,279],{"class":179},[115,6030,195],{"class":175},[115,6032,2052],{"class":125},[115,6034,195],{"class":175},[115,6036,289],{"class":179},[115,6038,6039,6041,6043,6045],{"class":117,"line":269},[115,6040,295],{"class":171},[115,6042,299],{"class":298},[115,6044,1850],{"class":121},[115,6046,305],{"class":175},[115,6048,6049],{"class":117,"line":292},[115,6050,2951],{"class":747},[115,6052,6053],{"class":117,"line":308},[115,6054,266],{"emptyLinePlaceholder":265},[115,6056,6057],{"class":117,"line":320},[115,6058,2960],{"class":747},[115,6060,6061,6063,6065,6067,6069,6071],{"class":117,"line":335},[115,6062,311],{"class":175},[115,6064,2967],{"class":275},[115,6066,279],{"class":179},[115,6068,717],{"class":175},[115,6070,720],{"class":298},[115,6072,2976],{"class":179},[115,6074,6075,6077,6079,6081,6083],{"class":117,"line":340},[115,6076,2981],{"class":323},[115,6078,327],{"class":175},[115,6080,2877],{"class":121},[115,6082,1943],{"class":179},[115,6084,198],{"class":175},[115,6086,6087],{"class":117,"line":350},[115,6088,502],{"class":175},[22,6090,6091],{},[15,6092,6093,6095,6096,6098,6099,6101],{},[58,6094,3000],{}," is required for ",[58,6097,3004],{}," relations. You must put ",[58,6100,3008],{}," on one (owning) side of relation.",[795,6103,6105],{"id":6104},"saving-many-to-many-relations","Saving many-to-many relations",[15,6107,6108],{},"Let's update the order service file and add some new lines to create method",[105,6110,6111],{"className":162,"code":3019,"filename":2293,"language":164,"meta":111,"style":111},[58,6112,6113,6123,6127,6131,6157,6161,6165,6177,6181,6203,6209,6235,6251,6265,6269,6293,6297,6301,6305,6319,6323,6327,6331],{"__ignoreMap":111},[115,6114,6115,6117,6119,6121],{"class":117,"line":118},[115,6116,295],{"class":171},[115,6118,299],{"class":298},[115,6120,2462],{"class":121},[115,6122,305],{"class":175},[115,6124,6125],{"class":117,"line":135},[115,6126,3036],{"class":747},[115,6128,6129],{"class":117,"line":223},[115,6130,266],{"emptyLinePlaceholder":265},[115,6132,6133,6135,6137,6139,6141,6143,6145,6147,6149,6151,6153,6155],{"class":117,"line":262},[115,6134,1433],{"class":298},[115,6136,1436],{"class":323},[115,6138,279],{"class":175},[115,6140,788],{"class":730},[115,6142,327],{"class":175},[115,6144,330],{"class":121},[115,6146,233],{"class":175},[115,6148,2549],{"class":730},[115,6150,327],{"class":175},[115,6152,2324],{"class":121},[115,6154,734],{"class":175},[115,6156,305],{"class":175},[115,6158,6159],{"class":117,"line":269},[115,6160,3071],{"class":747},[115,6162,6163],{"class":117,"line":292},[115,6164,266],{"emptyLinePlaceholder":265},[115,6166,6167,6169,6171,6173,6175],{"class":117,"line":308},[115,6168,1454],{"class":298},[115,6170,3082],{"class":179},[115,6172,1459],{"class":175},[115,6174,3087],{"class":323},[115,6176,198],{"class":175},[115,6178,6179],{"class":117,"line":320},[115,6180,266],{"emptyLinePlaceholder":265},[115,6182,6183,6185,6187,6189,6191,6193,6195,6197,6199,6201],{"class":117,"line":335},[115,6184,3098],{"class":171},[115,6186,727],{"class":323},[115,6188,3103],{"class":298},[115,6190,3106],{"class":179},[115,6192,3109],{"class":175},[115,6194,2549],{"class":179},[115,6196,35],{"class":175},[115,6198,3116],{"class":179},[115,6200,1751],{"class":323},[115,6202,1682],{"class":175},[115,6204,6205,6207],{"class":117,"line":340},[115,6206,3125],{"class":171},[115,6208,305],{"class":175},[115,6210,6211,6213,6215,6217,6219,6221,6223,6225,6227,6229,6231,6233],{"class":117,"line":350},[115,6212,3132],{"class":298},[115,6214,3135],{"class":179},[115,6216,1459],{"class":175},[115,6218,1462],{"class":171},[115,6220,1465],{"class":175},[115,6222,3144],{"class":179},[115,6224,35],{"class":175},[115,6226,1613],{"class":275},[115,6228,279],{"class":323},[115,6230,3153],{"class":179},[115,6232,734],{"class":323},[115,6234,198],{"class":175},[115,6236,6237,6239,6241,6243,6245,6247,6249],{"class":117,"line":363},[115,6238,3162],{"class":179},[115,6240,35],{"class":175},[115,6242,3167],{"class":275},[115,6244,279],{"class":323},[115,6246,3172],{"class":179},[115,6248,734],{"class":323},[115,6250,198],{"class":175},[115,6252,6253,6255,6257,6259,6261,6263],{"class":117,"line":368},[115,6254,3181],{"class":175},[115,6256,3184],{"class":171},[115,6258,727],{"class":323},[115,6260,3189],{"class":179},[115,6262,1751],{"class":323},[115,6264,1682],{"class":175},[115,6266,6267],{"class":117,"line":393},[115,6268,3198],{"class":747},[115,6270,6271,6273,6275,6277,6279,6281,6283,6285,6287,6289,6291],{"class":117,"line":405},[115,6272,3203],{"class":179},[115,6274,35],{"class":175},[115,6276,3208],{"class":275},[115,6278,279],{"class":323},[115,6280,195],{"class":175},[115,6282,3215],{"class":125},[115,6284,195],{"class":175},[115,6286,3220],{"class":175},[115,6288,3106],{"class":179},[115,6290,734],{"class":323},[115,6292,198],{"class":175},[115,6294,6295],{"class":117,"line":410},[115,6296,3231],{"class":175},[115,6298,6299],{"class":117,"line":419},[115,6300,3236],{"class":175},[115,6302,6303],{"class":117,"line":431},[115,6304,266],{"emptyLinePlaceholder":265},[115,6306,6307,6309,6311,6313,6315,6317],{"class":117,"line":436},[115,6308,2609],{"class":179},[115,6310,35],{"class":175},[115,6312,3116],{"class":179},[115,6314,1459],{"class":175},[115,6316,3082],{"class":179},[115,6318,198],{"class":175},[115,6320,6321],{"class":117,"line":487},[115,6322,266],{"emptyLinePlaceholder":265},[115,6324,6325],{"class":117,"line":499},[115,6326,3263],{"class":747},[115,6328,6329],{"class":117,"line":1072},[115,6330,1424],{"class":175},[115,6332,6333],{"class":117,"line":1106},[115,6334,502],{"class":175},[795,6336,6338],{"id":6337},"loading-many-to-many-relations","Loading Many-to-Many relations",[15,6340,6341],{},"To load orders with products inside you, must specify the relation in FindOptions:",[105,6343,6344],{"className":162,"code":3281,"filename":2293,"language":164,"meta":111,"style":111},[58,6345,6346,6356,6360,6364,6394,6412,6420,6430,6434,6446,6454,6458],{"__ignoreMap":111},[115,6347,6348,6350,6352,6354],{"class":117,"line":118},[115,6349,295],{"class":171},[115,6351,299],{"class":298},[115,6353,2462],{"class":121},[115,6355,305],{"class":175},[115,6357,6358],{"class":117,"line":135},[115,6359,3036],{"class":747},[115,6361,6362],{"class":117,"line":223},[115,6363,266],{"emptyLinePlaceholder":265},[115,6365,6366,6368,6370,6372,6374,6376,6378,6380,6382,6384,6386,6388,6390,6392],{"class":117,"line":262},[115,6367,1433],{"class":298},[115,6369,1646],{"class":323},[115,6371,279],{"class":175},[115,6373,792],{"class":730},[115,6375,327],{"class":175},[115,6377,330],{"class":121},[115,6379,2691],{"class":175},[115,6381,2694],{"class":121},[115,6383,1383],{"class":175},[115,6385,1816],{"class":121},[115,6387,2803],{"class":175},[115,6389,2806],{"class":121},[115,6391,2703],{"class":175},[115,6393,305],{"class":175},[115,6395,6396,6398,6400,6402,6404,6406,6408,6410],{"class":117,"line":269},[115,6397,1608],{"class":171},[115,6399,1462],{"class":171},[115,6401,1465],{"class":175},[115,6403,2653],{"class":179},[115,6405,35],{"class":175},[115,6407,1613],{"class":275},[115,6409,279],{"class":323},[115,6411,1682],{"class":175},[115,6413,6414,6416,6418],{"class":117,"line":292},[115,6415,1704],{"class":323},[115,6417,327],{"class":175},[115,6419,305],{"class":175},[115,6421,6422,6424,6426,6428],{"class":117,"line":308},[115,6423,3162],{"class":323},[115,6425,327],{"class":175},[115,6427,386],{"class":385},[115,6429,2516],{"class":175},[115,6431,6432],{"class":117,"line":320},[115,6433,3372],{"class":175},[115,6435,6436,6438,6440,6442,6444],{"class":117,"line":335},[115,6437,1688],{"class":323},[115,6439,327],{"class":175},[115,6441,176],{"class":175},[115,6443,1695],{"class":179},[115,6445,1698],{"class":175},[115,6447,6448,6450,6452],{"class":117,"line":340},[115,6449,1726],{"class":175},[115,6451,734],{"class":323},[115,6453,198],{"class":175},[115,6455,6456],{"class":117,"line":350},[115,6457,1424],{"class":175},[115,6459,6460],{"class":117,"line":363},[115,6461,502],{"class":175},[10,6463,6465],{"id":6464},"summary","Summary",[15,6467,6468],{},"We delve deeply into the world of data relationships with NestJS, TypeORM, and SQL databases in this extensive blog\npost. This lesson will help you regardless of whether you're an experienced NestJS developer trying to broaden your\nexpertise or a novice keen to learn the nuances of data connections.\nStay tuned for the upcoming post, where we'll delve into data validation and error handling, equipping you with even\nmore tools to become a NestJS expert. Join us on this exciting adventure, and let's master the art of data relationships\nin NestJS together!",[3409,6470,3411],{},{"title":111,"searchDepth":135,"depth":135,"links":6472},[6473,6474,6475,6479,6482,6486],{"id":12,"depth":135,"text":13},{"id":3470,"depth":135,"text":3471},{"id":3506,"depth":135,"text":3507,"children":6476},[6477,6478],{"id":4072,"depth":223,"text":4073},{"id":4401,"depth":223,"text":4402},{"id":4983,"depth":135,"text":4984,"children":6480},[6481],{"id":5424,"depth":223,"text":5425},{"id":5959,"depth":135,"text":5960,"children":6483},[6484,6485],{"id":6104,"depth":223,"text":6105},{"id":6337,"depth":223,"text":6338},{"id":6464,"depth":135,"text":6465},"Unlock the Power of Data Relationships with NestJS, TypeORM, and SQL Databases. Master the art of building complex data structures and seamless interactions. Ideal for both seasoned NestJS developers and beginners looking to create cutting-edge apps",{},"\u002Fbackend\u002Fnest-js\u002Funlocking-the-power-of-relationships-with-typeorm",{"title":3447,"description":6487},"2.backend\u002F1.nest-js\u002F4.unlocking-the-power-of-relationships-with-typeorm",[3438,3439,3440],[3442,3443],"Nv9vnQPmZBBM5geUjkSqvpSonAv16tiIbIs9dlcdGIE",[6496,6499],{"title":6497,"path":6498},"Maîtriser NestJS : connecter NestJS à une base PostgreSQL","\u002Fbackend\u002Fnest-js\u002Fconecting-nestjs-to-postgres-database.fr",{"title":6500,"path":6501},"Comment un entretien m'a poussé à créer Obscura — un générateur de mots de passe avec une vraie entropie","\u002Fsecurity\u002Fintroducing-obscura.fr",[6503,6508,6515],{"path":6498,"title":6497,"description":6504,"date":6505,"tags":6506,"topics":6507},"Apprends les étapes essentielles pour maîtriser NestJS et tirer parti de TypeORM pour une connectivité base de données robuste dans tes projets.","2023-09-06",[3438,3439,3440],[3443,3442],{"path":6509,"title":6510,"description":6511,"date":6512,"tags":6513,"topics":6514},"\u002Fbackend\u002Fnest-js\u002Funderstanding-services-modules-and-controllers.fr","Maîtriser NestJS : comprendre Services, Modules et Contrôleurs","Apprends les composants essentiels de NestJS pour construire des applications serveur scalables. Examine le rôle des services, modules et contrôleurs en exploitant les capacités des DTO (Data Transfer Objects) pour la validation et le renforcement de la sécurité.","2023-09-03",[3438,3439,3440],[3442,3443],{"path":6516,"title":6517,"description":6518,"date":6519,"tags":6520,"topics":6521},"\u002Fbackend\u002Fnest-js\u002Fintroducing-nest-js.fr","Maîtriser NestJS : ton guide ultime du développement backend moderne","Explore NestJS, un framework Node.js moderne, dans cette introduction complète. Rejoins notre série pour maîtriser l'architecture modulaire, les contrôleurs, providers, services, et plus encore. Construis des applications backend scalables en toute confiance. Bienvenue dans la partie 1 de la série NestJS !","2023-08-23",[3438,3439,3440],[3442,3443],1780074487565]