[{"data":1,"prerenderedAt":525},["ShallowReactive",2],{"navigation_docs":3,"-models-events":69,"-models-events-surround":520},[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":51,"body":71,"description":512,"extension":513,"links":514,"meta":515,"navigation":516,"path":52,"seo":517,"stem":53,"__hash__":519},"docs/2.models/6.events.md",{"type":72,"value":73,"toc":510},"minimark",[74,78,90,393,396,399,443,446,495,506],[75,76,77],"p",{},"Lifecycle events let you run custom logic before and after model persistence.",[75,79,80,81,85,86,89],{},"Define them in the ",[82,83,84],"code",{},"events"," object passed to ",[82,87,88],{},"defineModel",":",[91,92,97],"pre",{"className":93,"code":94,"language":95,"meta":96,"style":96},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineModel } from \"vasta-orm\";\nimport db from \"@/database/db\";\n\nexport default class Pet extends defineModel({\n  db,\n  table: \"pets\",\n  events: {\n    created: async (pet) => {\n      console.log(`Created pet ${pet.attributes.name}`);\n      await someAsyncFunction();\n    },\n    deleting: (pet) => {\n      console.log(`Deleting pet ${pet.attributes.id}`);\n    },\n  },\n}) {}\n","ts","",[82,98,99,135,155,162,191,200,218,229,255,297,311,317,335,370,375,381],{"__ignoreMap":96},[100,101,104,108,112,116,119,122,125,129,132],"span",{"class":102,"line":103},"line",1,[100,105,107],{"class":106},"s7zQu","import",[100,109,111],{"class":110},"sMK4o"," {",[100,113,115],{"class":114},"sTEyZ"," defineModel",[100,117,118],{"class":110}," }",[100,120,121],{"class":106}," from",[100,123,124],{"class":110}," \"",[100,126,128],{"class":127},"sfazB","vasta-orm",[100,130,131],{"class":110},"\"",[100,133,134],{"class":110},";\n",[100,136,138,140,143,146,148,151,153],{"class":102,"line":137},2,[100,139,107],{"class":106},[100,141,142],{"class":114}," db ",[100,144,145],{"class":106},"from",[100,147,124],{"class":110},[100,149,150],{"class":127},"@/database/db",[100,152,131],{"class":110},[100,154,134],{"class":110},[100,156,158],{"class":102,"line":157},3,[100,159,161],{"emptyLinePlaceholder":160},true,"\n",[100,163,165,168,171,175,179,182,185,188],{"class":102,"line":164},4,[100,166,167],{"class":106},"export",[100,169,170],{"class":106}," default",[100,172,174],{"class":173},"spNyl"," class",[100,176,178],{"class":177},"sBMFI"," Pet",[100,180,181],{"class":173}," extends",[100,183,115],{"class":184},"s2Zo4",[100,186,187],{"class":114},"(",[100,189,190],{"class":110},"{\n",[100,192,194,197],{"class":102,"line":193},5,[100,195,196],{"class":114},"  db",[100,198,199],{"class":110},",\n",[100,201,203,207,209,211,214,216],{"class":102,"line":202},6,[100,204,206],{"class":205},"swJcz","  table",[100,208,89],{"class":110},[100,210,124],{"class":110},[100,212,213],{"class":127},"pets",[100,215,131],{"class":110},[100,217,199],{"class":110},[100,219,221,224,226],{"class":102,"line":220},7,[100,222,223],{"class":205},"  events",[100,225,89],{"class":110},[100,227,228],{"class":110}," {\n",[100,230,232,235,237,240,243,247,250,253],{"class":102,"line":231},8,[100,233,234],{"class":184},"    created",[100,236,89],{"class":110},[100,238,239],{"class":173}," async",[100,241,242],{"class":110}," (",[100,244,246],{"class":245},"sHdIc","pet",[100,248,249],{"class":110},")",[100,251,252],{"class":173}," =>",[100,254,228],{"class":110},[100,256,258,261,264,267,269,272,275,278,280,282,285,287,290,293,295],{"class":102,"line":257},9,[100,259,260],{"class":114},"      console",[100,262,263],{"class":110},".",[100,265,266],{"class":184},"log",[100,268,187],{"class":205},[100,270,271],{"class":110},"`",[100,273,274],{"class":127},"Created pet ",[100,276,277],{"class":110},"${",[100,279,246],{"class":114},[100,281,263],{"class":110},[100,283,284],{"class":114},"attributes",[100,286,263],{"class":110},[100,288,289],{"class":114},"name",[100,291,292],{"class":110},"}`",[100,294,249],{"class":205},[100,296,134],{"class":110},[100,298,300,303,306,309],{"class":102,"line":299},10,[100,301,302],{"class":106},"      await",[100,304,305],{"class":184}," someAsyncFunction",[100,307,308],{"class":205},"()",[100,310,134],{"class":110},[100,312,314],{"class":102,"line":313},11,[100,315,316],{"class":110},"    },\n",[100,318,320,323,325,327,329,331,333],{"class":102,"line":319},12,[100,321,322],{"class":184},"    deleting",[100,324,89],{"class":110},[100,326,242],{"class":110},[100,328,246],{"class":245},[100,330,249],{"class":110},[100,332,252],{"class":173},[100,334,228],{"class":110},[100,336,338,340,342,344,346,348,351,353,355,357,359,361,364,366,368],{"class":102,"line":337},13,[100,339,260],{"class":114},[100,341,263],{"class":110},[100,343,266],{"class":184},[100,345,187],{"class":205},[100,347,271],{"class":110},[100,349,350],{"class":127},"Deleting pet ",[100,352,277],{"class":110},[100,354,246],{"class":114},[100,356,263],{"class":110},[100,358,284],{"class":114},[100,360,263],{"class":110},[100,362,363],{"class":114},"id",[100,365,292],{"class":110},[100,367,249],{"class":205},[100,369,134],{"class":110},[100,371,373],{"class":102,"line":372},14,[100,374,316],{"class":110},[100,376,378],{"class":102,"line":377},15,[100,379,380],{"class":110},"  },\n",[100,382,384,387,390],{"class":102,"line":383},16,[100,385,386],{"class":110},"}",[100,388,389],{"class":114},") ",[100,391,392],{"class":110},"{}\n",[75,394,395],{},"Event handlers receive the model instance as a parameter and should not return anything. They may be async functions, and Vasta will wait for them to resolve before proceeding.",[75,397,398],{},"Supported events:",[400,401,402,408,413,418,423,428,433,438],"ul",{},[403,404,405],"li",{},[82,406,407],{},"creating",[403,409,410],{},[82,411,412],{},"created",[403,414,415],{},[82,416,417],{},"updating",[403,419,420],{},[82,421,422],{},"updated",[403,424,425],{},[82,426,427],{},"saving",[403,429,430],{},[82,431,432],{},"saved",[403,434,435],{},[82,436,437],{},"deleting",[403,439,440],{},[82,441,442],{},"deleted",[75,444,445],{},"Dispatch behavior:",[400,447,448,464,477,486],{},[403,449,450,451,454,455,457,458,457,460,457,462],{},"New model ",[82,452,453],{},"save()"," dispatches: ",[82,456,427],{}," → ",[82,459,407],{},[82,461,412],{},[82,463,432],{},[403,465,466,467,454,469,457,471,457,473,457,475],{},"Existing dirty model ",[82,468,453],{},[82,470,427],{},[82,472,417],{},[82,474,422],{},[82,476,432],{},[403,478,479,480,454,482,457,484],{},"Existing clean model ",[82,481,453],{},[82,483,427],{},[82,485,432],{},[403,487,488,454,491,457,493],{},[82,489,490],{},"delete()",[82,492,437],{},[82,494,442],{},[75,496,497,498,501,502,505],{},"Events ending with ",[82,499,500],{},"-ing"," run before persistence. Events ending with ",[82,503,504],{},"-ed"," run after persistence.",[507,508,509],"style",{},"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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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);}",{"title":96,"searchDepth":137,"depth":137,"links":511},[],"Defining lifecycle events for models with Vasta.","md",null,{},{"icon":54},{"description":518,"title":51},"Learn how to define lifecycle events for models with Vasta.","q8Tt8nwaduTyipEtuA5LKTn_4SA2gFdachaTzgCyEa0",[521,523],{"title":46,"path":47,"stem":48,"description":522,"icon":49,"children":-1},"Defining relationships between models with Vasta.",{"title":56,"path":57,"stem":58,"description":524,"icon":59,"children":-1},"Defining migrations and seeders using kysely-ctl and Vasta",1778782559063]