[{"data":1,"prerenderedAt":1120},["ShallowReactive",2],{"navigation_docs":3,"-models-relationships":69,"-models-relationships-surround":1115},[4,20,60],{"title":5,"path":6,"stem":7,"children":8,"page":19},"Getting Started","/getting-started","1.getting-started",[9,14],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","/getting-started/introduction","1.getting-started/1.introduction","i-lucide-house",{"title":15,"path":16,"stem":17,"icon":18},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",false,{"title":21,"path":22,"stem":23,"children":24,"page":19},"Models","/models","2.models",[25,30,35,40,45,50,55],{"title":26,"path":27,"stem":28,"icon":29},"Defining Models","/models/defining-models","2.models/1.defining-models","i-lucide-database",{"title":31,"path":32,"stem":33,"icon":34},"Retrieving Models","/models/retrieving","2.models/2.retrieving","i-lucide-database-search",{"title":36,"path":37,"stem":38,"icon":39},"Inserting & Updating Models","/models/inserting-and-updating","2.models/3.inserting-and-updating","i-lucide-between-horizontal-start",{"title":41,"path":42,"stem":43,"icon":44},"Deleting Models","/models/deleting","2.models/4.deleting","i-lucide-trash",{"title":46,"path":47,"stem":48,"icon":49},"Relationships","/models/relationships","2.models/5.relationships","i-lucide-share-2",{"title":51,"path":52,"stem":53,"icon":54},"Events","/models/events","2.models/6.events","i-lucide-bell",{"title":56,"path":57,"stem":58,"icon":59},"Migrations & Seeders","/models/migrations-and-seeders","2.models/7.migrations-and-seeders","i-lucide-wrench",{"title":61,"path":62,"stem":63,"children":64,"page":19},"Contributing","/contributing","3.contributing",[65],{"title":66,"path":67,"stem":68},"Local Development","/contributing/local-development","3.contributing/1.local-development",{"id":70,"title":46,"body":71,"description":1107,"extension":1108,"links":1109,"meta":1110,"navigation":1111,"path":47,"seo":1112,"stem":48,"__hash__":1114},"docs/2.models/5.relationships.md",{"type":72,"value":73,"toc":1100},"minimark",[74,87,92,103,191,248,251,401,406,409,471,474,554,558,561,624,627,771,774,862,866,873,896,967,970,1096],[75,76,77,78,82,83,86],"p",{},"Vasta supports defining relationships between your models. You can define relationships such as ",[79,80,81],"code",{},"hasMany"," and ",[79,84,85],{},"belongsTo"," to easily navigate between related models. Related models can be eager loaded or lazy loaded as needed.",[88,89,91],"h2",{"id":90},"one-to-many-relationships","One-to-Many Relationships",[75,93,94,95,98,99,102],{},"For example, if you have a ",[79,96,97],{},"Person"," model and a ",[79,100,101],{},"Pet"," model, you can define the relationships as follows:",[104,105,110],"pre",{"className":106,"code":107,"language":108,"meta":109,"style":109},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// In Person model\nget pets() {\n  return this.hasMany(Pet, \"person_id\", \"id\");\n}\n","ts","",[79,111,112,121,139,185],{"__ignoreMap":109},[113,114,117],"span",{"class":115,"line":116},"line",1,[113,118,120],{"class":119},"sHwdD","// In Person model\n",[113,122,124,128,132,135],{"class":115,"line":123},2,[113,125,127],{"class":126},"sTEyZ","get ",[113,129,131],{"class":130},"s2Zo4","pets",[113,133,134],{"class":126},"() ",[113,136,138],{"class":137},"sMK4o","{\n",[113,140,142,146,149,151,155,157,160,163,167,170,172,174,177,179,182],{"class":115,"line":141},3,[113,143,145],{"class":144},"s7zQu","  return",[113,147,148],{"class":137}," this.",[113,150,81],{"class":130},[113,152,154],{"class":153},"swJcz","(",[113,156,101],{"class":126},[113,158,159],{"class":137},",",[113,161,162],{"class":137}," \"",[113,164,166],{"class":165},"sfazB","person_id",[113,168,169],{"class":137},"\"",[113,171,159],{"class":137},[113,173,162],{"class":137},[113,175,176],{"class":165},"id",[113,178,169],{"class":137},[113,180,181],{"class":153},")",[113,183,184],{"class":137},";\n",[113,186,188],{"class":115,"line":187},4,[113,189,190],{"class":137},"}\n",[104,192,194],{"className":106,"code":193,"language":108,"meta":109,"style":109},"// In Pet model\nget owner() {\n  return this.belongsTo(Person, \"person_id\", \"id\");\n}\n",[79,195,196,201,212,244],{"__ignoreMap":109},[113,197,198],{"class":115,"line":116},[113,199,200],{"class":119},"// In Pet model\n",[113,202,203,205,208,210],{"class":115,"line":123},[113,204,127],{"class":126},[113,206,207],{"class":130},"owner",[113,209,134],{"class":126},[113,211,138],{"class":137},[113,213,214,216,218,220,222,224,226,228,230,232,234,236,238,240,242],{"class":115,"line":141},[113,215,145],{"class":144},[113,217,148],{"class":137},[113,219,85],{"class":130},[113,221,154],{"class":153},[113,223,97],{"class":126},[113,225,159],{"class":137},[113,227,162],{"class":137},[113,229,166],{"class":165},[113,231,169],{"class":137},[113,233,159],{"class":137},[113,235,162],{"class":137},[113,237,176],{"class":165},[113,239,169],{"class":137},[113,241,181],{"class":153},[113,243,184],{"class":137},[113,245,246],{"class":115,"line":187},[113,247,190],{"class":137},[75,249,250],{},"You can define multiple relationships between the same models. For example, if you wanted a relationship for a peron's pets, but also a relationship for a person's birds:",[104,252,254],{"className":106,"code":253,"language":108,"meta":109,"style":109},"  // A Person has many Pets\n  get pets() {\n    // We pass the Pet class, and the foreign key column on the pets table\n    return this.hasMany(Pet, \"person_id\", \"id\");\n  }\n  // A person has many birds, which are a subset of their pets\n  get birds() {\n    // we can extend the relationship to get only the person's birds\n    return this.pets.where(\"type\", \"bird\");\n\n    // Alternatively, we could define the birds relationship directly using hasMany\n    // return this.hasMany(Pet, \"person_id\", \"id\").where(\"type\", \"bird\");\n  }\n",[79,255,256,261,272,277,310,316,322,334,340,377,384,390,396],{"__ignoreMap":109},[113,257,258],{"class":115,"line":116},[113,259,260],{"class":119},"  // A Person has many Pets\n",[113,262,263,266,268,270],{"class":115,"line":123},[113,264,265],{"class":126},"  get ",[113,267,131],{"class":130},[113,269,134],{"class":126},[113,271,138],{"class":137},[113,273,274],{"class":115,"line":141},[113,275,276],{"class":119},"    // We pass the Pet class, and the foreign key column on the pets table\n",[113,278,279,282,284,286,288,290,292,294,296,298,300,302,304,306,308],{"class":115,"line":187},[113,280,281],{"class":144},"    return",[113,283,148],{"class":137},[113,285,81],{"class":130},[113,287,154],{"class":153},[113,289,101],{"class":126},[113,291,159],{"class":137},[113,293,162],{"class":137},[113,295,166],{"class":165},[113,297,169],{"class":137},[113,299,159],{"class":137},[113,301,162],{"class":137},[113,303,176],{"class":165},[113,305,169],{"class":137},[113,307,181],{"class":153},[113,309,184],{"class":137},[113,311,313],{"class":115,"line":312},5,[113,314,315],{"class":137},"  }\n",[113,317,319],{"class":115,"line":318},6,[113,320,321],{"class":119},"  // A person has many birds, which are a subset of their pets\n",[113,323,325,327,330,332],{"class":115,"line":324},7,[113,326,265],{"class":126},[113,328,329],{"class":130},"birds",[113,331,134],{"class":126},[113,333,138],{"class":137},[113,335,337],{"class":115,"line":336},8,[113,338,339],{"class":119},"    // we can extend the relationship to get only the person's birds\n",[113,341,343,345,347,349,352,355,357,359,362,364,366,368,371,373,375],{"class":115,"line":342},9,[113,344,281],{"class":144},[113,346,148],{"class":137},[113,348,131],{"class":126},[113,350,351],{"class":137},".",[113,353,354],{"class":130},"where",[113,356,154],{"class":153},[113,358,169],{"class":137},[113,360,361],{"class":165},"type",[113,363,169],{"class":137},[113,365,159],{"class":137},[113,367,162],{"class":137},[113,369,370],{"class":165},"bird",[113,372,169],{"class":137},[113,374,181],{"class":153},[113,376,184],{"class":137},[113,378,380],{"class":115,"line":379},10,[113,381,383],{"emptyLinePlaceholder":382},true,"\n",[113,385,387],{"class":115,"line":386},11,[113,388,389],{"class":119},"    // Alternatively, we could define the birds relationship directly using hasMany\n",[113,391,393],{"class":115,"line":392},12,[113,394,395],{"class":119},"    // return this.hasMany(Pet, \"person_id\", \"id\").where(\"type\", \"bird\");\n",[113,397,399],{"class":115,"line":398},13,[113,400,315],{"class":137},[402,403,405],"h3",{"id":404},"lazy-loading","Lazy Loading",[75,407,408],{},"You can lazy-load a person's pets or a pet's owner:",[104,410,412],{"className":106,"code":411,"language":108,"meta":109,"style":109},"const person = await Person.find(1);\nconst pets = await person.pets; // Get all pets belonging to the person\n",[79,413,414,447],{"__ignoreMap":109},[113,415,416,420,423,426,429,432,434,437,439,443,445],{"class":115,"line":116},[113,417,419],{"class":418},"spNyl","const",[113,421,422],{"class":126}," person ",[113,424,425],{"class":137},"=",[113,427,428],{"class":144}," await",[113,430,431],{"class":126}," Person",[113,433,351],{"class":137},[113,435,436],{"class":130},"find",[113,438,154],{"class":126},[113,440,442],{"class":441},"sbssI","1",[113,444,181],{"class":126},[113,446,184],{"class":137},[113,448,449,451,454,456,458,461,463,465,468],{"class":115,"line":123},[113,450,419],{"class":418},[113,452,453],{"class":126}," pets ",[113,455,425],{"class":137},[113,457,428],{"class":144},[113,459,460],{"class":126}," person",[113,462,351],{"class":137},[113,464,131],{"class":126},[113,466,467],{"class":137},";",[113,469,470],{"class":119}," // Get all pets belonging to the person\n",[75,472,473],{},"Lazy loaded relationship queries can be constrained:",[104,475,477],{"className":106,"code":476,"language":108,"meta":109,"style":109},"const person = await Person.findOrFail(3);\nconst bird = await person.pets.where(\"type\", \"bird\").first();\n",[79,478,479,505],{"__ignoreMap":109},[113,480,481,483,485,487,489,491,493,496,498,501,503],{"class":115,"line":116},[113,482,419],{"class":418},[113,484,422],{"class":126},[113,486,425],{"class":137},[113,488,428],{"class":144},[113,490,431],{"class":126},[113,492,351],{"class":137},[113,494,495],{"class":130},"findOrFail",[113,497,154],{"class":126},[113,499,500],{"class":441},"3",[113,502,181],{"class":126},[113,504,184],{"class":137},[113,506,507,509,512,514,516,518,520,522,524,526,528,530,532,534,536,538,540,542,544,546,549,552],{"class":115,"line":123},[113,508,419],{"class":418},[113,510,511],{"class":126}," bird ",[113,513,425],{"class":137},[113,515,428],{"class":144},[113,517,460],{"class":126},[113,519,351],{"class":137},[113,521,131],{"class":126},[113,523,351],{"class":137},[113,525,354],{"class":130},[113,527,154],{"class":126},[113,529,169],{"class":137},[113,531,361],{"class":165},[113,533,169],{"class":137},[113,535,159],{"class":137},[113,537,162],{"class":137},[113,539,370],{"class":165},[113,541,169],{"class":137},[113,543,181],{"class":126},[113,545,351],{"class":137},[113,547,548],{"class":130},"first",[113,550,551],{"class":126},"()",[113,553,184],{"class":137},[402,555,557],{"id":556},"eager-loading","Eager Loading",[75,559,560],{},"You can also eager load relationships to optimize your queries:",[104,562,564],{"className":106,"code":563,"language":108,"meta":109,"style":109},"const person = await Person.with(\"pets\").find(1);\nconst pets = person.pets; // This will not trigger a new query, as the pets were eager loaded\n",[79,565,566,605],{"__ignoreMap":109},[113,567,568,570,572,574,576,578,580,583,585,587,589,591,593,595,597,599,601,603],{"class":115,"line":116},[113,569,419],{"class":418},[113,571,422],{"class":126},[113,573,425],{"class":137},[113,575,428],{"class":144},[113,577,431],{"class":126},[113,579,351],{"class":137},[113,581,582],{"class":130},"with",[113,584,154],{"class":126},[113,586,169],{"class":137},[113,588,131],{"class":165},[113,590,169],{"class":137},[113,592,181],{"class":126},[113,594,351],{"class":137},[113,596,436],{"class":130},[113,598,154],{"class":126},[113,600,442],{"class":441},[113,602,181],{"class":126},[113,604,184],{"class":137},[113,606,607,609,611,613,615,617,619,621],{"class":115,"line":123},[113,608,419],{"class":418},[113,610,453],{"class":126},[113,612,425],{"class":137},[113,614,460],{"class":126},[113,616,351],{"class":137},[113,618,131],{"class":126},[113,620,467],{"class":137},[113,622,623],{"class":119}," // This will not trigger a new query, as the pets were eager loaded\n",[75,625,626],{},"When eager loading, you can also add custom constraints to the relationship query. Pass an object mapping the relationship name to a callback function receiving the query builder:",[104,628,630],{"className":106,"code":629,"language":108,"meta":109,"style":109},"// Eager load only pets that are cats, sorting them by name\nconst person = await Person.with({\n  pets: (query) => query.where(\"type\", \"cat\").orderBy(\"name\", \"desc\"),\n}).find(1);\n\nconst catsOnly = person.pets;\n",[79,631,632,637,657,731,750,754],{"__ignoreMap":109},[113,633,634],{"class":115,"line":116},[113,635,636],{"class":119},"// Eager load only pets that are cats, sorting them by name\n",[113,638,639,641,643,645,647,649,651,653,655],{"class":115,"line":123},[113,640,419],{"class":418},[113,642,422],{"class":126},[113,644,425],{"class":137},[113,646,428],{"class":144},[113,648,431],{"class":126},[113,650,351],{"class":137},[113,652,582],{"class":130},[113,654,154],{"class":126},[113,656,138],{"class":137},[113,658,659,662,665,668,672,674,677,680,682,684,686,688,690,692,694,696,699,701,703,705,708,710,712,715,717,719,721,724,726,728],{"class":115,"line":141},[113,660,661],{"class":130},"  pets",[113,663,664],{"class":137},":",[113,666,667],{"class":137}," (",[113,669,671],{"class":670},"sHdIc","query",[113,673,181],{"class":137},[113,675,676],{"class":418}," =>",[113,678,679],{"class":126}," query",[113,681,351],{"class":137},[113,683,354],{"class":130},[113,685,154],{"class":126},[113,687,169],{"class":137},[113,689,361],{"class":165},[113,691,169],{"class":137},[113,693,159],{"class":137},[113,695,162],{"class":137},[113,697,698],{"class":165},"cat",[113,700,169],{"class":137},[113,702,181],{"class":126},[113,704,351],{"class":137},[113,706,707],{"class":130},"orderBy",[113,709,154],{"class":126},[113,711,169],{"class":137},[113,713,714],{"class":165},"name",[113,716,169],{"class":137},[113,718,159],{"class":137},[113,720,162],{"class":137},[113,722,723],{"class":165},"desc",[113,725,169],{"class":137},[113,727,181],{"class":126},[113,729,730],{"class":137},",\n",[113,732,733,736,738,740,742,744,746,748],{"class":115,"line":187},[113,734,735],{"class":137},"}",[113,737,181],{"class":126},[113,739,351],{"class":137},[113,741,436],{"class":130},[113,743,154],{"class":126},[113,745,442],{"class":441},[113,747,181],{"class":126},[113,749,184],{"class":137},[113,751,752],{"class":115,"line":312},[113,753,383],{"emptyLinePlaceholder":382},[113,755,756,758,761,763,765,767,769],{"class":115,"line":318},[113,757,419],{"class":418},[113,759,760],{"class":126}," catsOnly ",[113,762,425],{"class":137},[113,764,460],{"class":126},[113,766,351],{"class":137},[113,768,131],{"class":126},[113,770,184],{"class":137},[75,772,773],{},"You can even combine multiple eager loads with and without constraints in the same call:",[104,775,777],{"className":106,"code":776,"language":108,"meta":109,"style":109},"const people = await Person.with(\"vehicles\", { pets: (query) => query.where(\"type\", \"dog\") }).get();\n",[79,778,779],{"__ignoreMap":109},[113,780,781,783,786,788,790,792,794,796,798,800,803,805,807,810,813,815,817,819,821,823,825,827,829,831,833,835,837,839,841,844,846,849,851,853,855,858,860],{"class":115,"line":116},[113,782,419],{"class":418},[113,784,785],{"class":126}," people ",[113,787,425],{"class":137},[113,789,428],{"class":144},[113,791,431],{"class":126},[113,793,351],{"class":137},[113,795,582],{"class":130},[113,797,154],{"class":126},[113,799,169],{"class":137},[113,801,802],{"class":165},"vehicles",[113,804,169],{"class":137},[113,806,159],{"class":137},[113,808,809],{"class":137}," {",[113,811,812],{"class":130}," pets",[113,814,664],{"class":137},[113,816,667],{"class":137},[113,818,671],{"class":670},[113,820,181],{"class":137},[113,822,676],{"class":418},[113,824,679],{"class":126},[113,826,351],{"class":137},[113,828,354],{"class":130},[113,830,154],{"class":126},[113,832,169],{"class":137},[113,834,361],{"class":165},[113,836,169],{"class":137},[113,838,159],{"class":137},[113,840,162],{"class":137},[113,842,843],{"class":165},"dog",[113,845,169],{"class":137},[113,847,848],{"class":126},") ",[113,850,735],{"class":137},[113,852,181],{"class":126},[113,854,351],{"class":137},[113,856,857],{"class":130},"get",[113,859,551],{"class":126},[113,861,184],{"class":137},[88,863,865],{"id":864},"many-to-many-relationships","Many-to-Many Relationships",[75,867,868,869,872],{},"You can define many-to-many relationships using the ",[79,870,871],{},"belongsToMany"," method. This requires a pivot table (or join table) to link the two models together.",[75,874,875,876,878,879,882,883,885,886,888,889,892,893,895],{},"For example, if a ",[79,877,101],{}," can visit many ",[79,880,881],{},"Vet","s, and a ",[79,884,881],{}," can see many ",[79,887,101],{},"s, you might use a ",[79,890,891],{},"vet_visits"," join table. You can define the relationship on the ",[79,894,101],{}," model like this:",[104,897,899],{"className":106,"code":898,"language":108,"meta":109,"style":109},"// In Pet model\nget vets() {\n  // belongsToMany(RelatedModel, pivotTable, foreignPivotKey, relatedPivotKey)\n  return this.belongsToMany(Vet, \"vet_visits\", \"pet_id\", \"vet_id\");\n}\n",[79,900,901,905,916,921,963],{"__ignoreMap":109},[113,902,903],{"class":115,"line":116},[113,904,200],{"class":119},[113,906,907,909,912,914],{"class":115,"line":123},[113,908,127],{"class":126},[113,910,911],{"class":130},"vets",[113,913,134],{"class":126},[113,915,138],{"class":137},[113,917,918],{"class":115,"line":141},[113,919,920],{"class":119},"  // belongsToMany(RelatedModel, pivotTable, foreignPivotKey, relatedPivotKey)\n",[113,922,923,925,927,929,931,933,935,937,939,941,943,945,948,950,952,954,957,959,961],{"class":115,"line":187},[113,924,145],{"class":144},[113,926,148],{"class":137},[113,928,871],{"class":130},[113,930,154],{"class":153},[113,932,881],{"class":126},[113,934,159],{"class":137},[113,936,162],{"class":137},[113,938,891],{"class":165},[113,940,169],{"class":137},[113,942,159],{"class":137},[113,944,162],{"class":137},[113,946,947],{"class":165},"pet_id",[113,949,169],{"class":137},[113,951,159],{"class":137},[113,953,162],{"class":137},[113,955,956],{"class":165},"vet_id",[113,958,169],{"class":137},[113,960,181],{"class":153},[113,962,184],{"class":137},[113,964,965],{"class":115,"line":312},[113,966,190],{"class":137},[75,968,969],{},"You can interact with a many-to-many relationship just like any other, choosing to either eager load or lazy load the related models:",[104,971,973],{"className":106,"code":972,"language":108,"meta":109,"style":109},"// Lazy loading\nconst pet = await Pet.find(1);\nconst vets = await pet.vets; // Get all vets this pet has visited\n\n// Eager loading\nconst pets = await Pet.with(\"vets\").get();\nconst firstPetVets = pets[0].vets;\n",[79,974,975,980,1006,1029,1033,1038,1072],{"__ignoreMap":109},[113,976,977],{"class":115,"line":116},[113,978,979],{"class":119},"// Lazy loading\n",[113,981,982,984,987,989,991,994,996,998,1000,1002,1004],{"class":115,"line":123},[113,983,419],{"class":418},[113,985,986],{"class":126}," pet ",[113,988,425],{"class":137},[113,990,428],{"class":144},[113,992,993],{"class":126}," Pet",[113,995,351],{"class":137},[113,997,436],{"class":130},[113,999,154],{"class":126},[113,1001,442],{"class":441},[113,1003,181],{"class":126},[113,1005,184],{"class":137},[113,1007,1008,1010,1013,1015,1017,1020,1022,1024,1026],{"class":115,"line":141},[113,1009,419],{"class":418},[113,1011,1012],{"class":126}," vets ",[113,1014,425],{"class":137},[113,1016,428],{"class":144},[113,1018,1019],{"class":126}," pet",[113,1021,351],{"class":137},[113,1023,911],{"class":126},[113,1025,467],{"class":137},[113,1027,1028],{"class":119}," // Get all vets this pet has visited\n",[113,1030,1031],{"class":115,"line":187},[113,1032,383],{"emptyLinePlaceholder":382},[113,1034,1035],{"class":115,"line":312},[113,1036,1037],{"class":119},"// Eager loading\n",[113,1039,1040,1042,1044,1046,1048,1050,1052,1054,1056,1058,1060,1062,1064,1066,1068,1070],{"class":115,"line":318},[113,1041,419],{"class":418},[113,1043,453],{"class":126},[113,1045,425],{"class":137},[113,1047,428],{"class":144},[113,1049,993],{"class":126},[113,1051,351],{"class":137},[113,1053,582],{"class":130},[113,1055,154],{"class":126},[113,1057,169],{"class":137},[113,1059,911],{"class":165},[113,1061,169],{"class":137},[113,1063,181],{"class":126},[113,1065,351],{"class":137},[113,1067,857],{"class":130},[113,1069,551],{"class":126},[113,1071,184],{"class":137},[113,1073,1074,1076,1079,1081,1084,1087,1090,1092,1094],{"class":115,"line":324},[113,1075,419],{"class":418},[113,1077,1078],{"class":126}," firstPetVets ",[113,1080,425],{"class":137},[113,1082,1083],{"class":126}," pets[",[113,1085,1086],{"class":441},"0",[113,1088,1089],{"class":126},"]",[113,1091,351],{"class":137},[113,1093,911],{"class":126},[113,1095,184],{"class":137},[1097,1098,1099],"style",{},"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}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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":109,"searchDepth":123,"depth":123,"links":1101},[1102,1106],{"id":90,"depth":123,"text":91,"children":1103},[1104,1105],{"id":404,"depth":141,"text":405},{"id":556,"depth":141,"text":557},{"id":864,"depth":123,"text":865},"Defining relationships between models with Vasta.","md",null,{},{"icon":49},{"description":1113,"title":46},"Learn how to define relationships between models with Vasta.","cHZfKVABtUfdOofPK6Tiq0hwj13ZHJR_TGecY0WD_WQ",[1116,1118],{"title":41,"path":42,"stem":43,"description":1117,"icon":44,"children":-1},"Deleting models with Vasta.",{"title":51,"path":52,"stem":53,"description":1119,"icon":54,"children":-1},"Defining lifecycle events for models with Vasta.",1778782558748]