[{"data":1,"prerenderedAt":866},["ShallowReactive",2],{"navigation_docs":3,"-models-inserting-and-updating":69,"-models-inserting-and-updating-surround":861},[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":36,"body":71,"description":853,"extension":854,"links":855,"meta":856,"navigation":857,"path":37,"seo":858,"stem":38,"__hash__":860},"docs/2.models/3.inserting-and-updating.md",{"type":72,"value":73,"toc":847},"minimark",[74,79,92,193,200,256,260,263,369,376,441,444,460,464,474,584,588,594,614,621,843],[75,76,78],"h2",{"id":77},"inserting-records-and-creating-new-model-objects","Inserting records and creating new model objects",[80,81,82,83,87,88,91],"p",{},"New model objects can be created by using the ",[84,85,86],"code",{},"new"," operator to create an object of your model's class. You can then use ",[84,89,90],{},"save()"," to persist it to your database.",[93,94,99],"pre",{"className":95,"code":96,"language":97,"meta":98,"style":98},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","const pet = new Pet({ name: \"Zuko\", type: \"bird\" });\nawait pet.save();\n","ts","",[84,100,101,172],{"__ignoreMap":98},[102,103,106,110,114,118,121,125,128,131,135,138,141,145,148,151,154,156,158,161,163,166,169],"span",{"class":104,"line":105},"line",1,[102,107,109],{"class":108},"spNyl","const",[102,111,113],{"class":112},"sTEyZ"," pet ",[102,115,117],{"class":116},"sMK4o","=",[102,119,120],{"class":116}," new",[102,122,124],{"class":123},"s2Zo4"," Pet",[102,126,127],{"class":112},"(",[102,129,130],{"class":116},"{",[102,132,134],{"class":133},"swJcz"," name",[102,136,137],{"class":116},":",[102,139,140],{"class":116}," \"",[102,142,144],{"class":143},"sfazB","Zuko",[102,146,147],{"class":116},"\"",[102,149,150],{"class":116},",",[102,152,153],{"class":133}," type",[102,155,137],{"class":116},[102,157,140],{"class":116},[102,159,160],{"class":143},"bird",[102,162,147],{"class":116},[102,164,165],{"class":116}," }",[102,167,168],{"class":112},")",[102,170,171],{"class":116},";\n",[102,173,175,179,182,185,188,191],{"class":104,"line":174},2,[102,176,178],{"class":177},"s7zQu","await",[102,180,181],{"class":112}," pet",[102,183,184],{"class":116},".",[102,186,187],{"class":123},"save",[102,189,190],{"class":112},"()",[102,192,171],{"class":116},[80,194,195,196,199],{},"You can also do this in a single command by using ",[84,197,198],{},"create()"," to create a new model instance object and immediately save it to the database.",[93,201,203],{"className":95,"code":202,"language":97,"meta":98,"style":98},"const pet = await Pet.create({ name: \"Zuko\", type: \"cat\" });\n",[84,204,205],{"__ignoreMap":98},[102,206,207,209,211,213,216,218,220,223,225,227,229,231,233,235,237,239,241,243,245,248,250,252,254],{"class":104,"line":105},[102,208,109],{"class":108},[102,210,113],{"class":112},[102,212,117],{"class":116},[102,214,215],{"class":177}," await",[102,217,124],{"class":112},[102,219,184],{"class":116},[102,221,222],{"class":123},"create",[102,224,127],{"class":112},[102,226,130],{"class":116},[102,228,134],{"class":133},[102,230,137],{"class":116},[102,232,140],{"class":116},[102,234,144],{"class":143},[102,236,147],{"class":116},[102,238,150],{"class":116},[102,240,153],{"class":133},[102,242,137],{"class":116},[102,244,140],{"class":116},[102,246,247],{"class":143},"cat",[102,249,147],{"class":116},[102,251,165],{"class":116},[102,253,168],{"class":112},[102,255,171],{"class":116},[75,257,259],{"id":258},"setting-attributes","Setting Attributes",[80,261,262],{},"You can set attributes directly on a model instance using property accessors and then save the model instance.",[93,264,266],{"className":95,"code":265,"language":97,"meta":98,"style":98},"const pet = await Pet.findOrFail(1);\n\npet.name = \"New Name\";\npet.counter = pet.counter + 1;\n\nawait pet.save();\n",[84,267,268,295,301,323,349,354],{"__ignoreMap":98},[102,269,270,272,274,276,278,280,282,285,287,291,293],{"class":104,"line":105},[102,271,109],{"class":108},[102,273,113],{"class":112},[102,275,117],{"class":116},[102,277,215],{"class":177},[102,279,124],{"class":112},[102,281,184],{"class":116},[102,283,284],{"class":123},"findOrFail",[102,286,127],{"class":112},[102,288,290],{"class":289},"sbssI","1",[102,292,168],{"class":112},[102,294,171],{"class":116},[102,296,297],{"class":104,"line":174},[102,298,300],{"emptyLinePlaceholder":299},true,"\n",[102,302,304,307,309,312,314,316,319,321],{"class":104,"line":303},3,[102,305,306],{"class":112},"pet",[102,308,184],{"class":116},[102,310,311],{"class":112},"name ",[102,313,117],{"class":116},[102,315,140],{"class":116},[102,317,318],{"class":143},"New Name",[102,320,147],{"class":116},[102,322,171],{"class":116},[102,324,326,328,330,333,335,337,339,341,344,347],{"class":104,"line":325},4,[102,327,306],{"class":112},[102,329,184],{"class":116},[102,331,332],{"class":112},"counter ",[102,334,117],{"class":116},[102,336,181],{"class":112},[102,338,184],{"class":116},[102,340,332],{"class":112},[102,342,343],{"class":116},"+",[102,345,346],{"class":289}," 1",[102,348,171],{"class":116},[102,350,352],{"class":104,"line":351},5,[102,353,300],{"emptyLinePlaceholder":299},[102,355,357,359,361,363,365,367],{"class":104,"line":356},6,[102,358,178],{"class":177},[102,360,181],{"class":112},[102,362,184],{"class":116},[102,364,187],{"class":123},[102,366,190],{"class":112},[102,368,171],{"class":116},[80,370,371,372,375],{},"Alternatively, you set the attribute on the ",[84,373,374],{},"attributes"," property of the model instance.",[93,377,379],{"className":95,"code":378,"language":97,"meta":98,"style":98},"const pet = await Pet.findOrFail(1);\npet.attributes.name = \"New Name\";\nawait pet.save();\n",[84,380,381,405,427],{"__ignoreMap":98},[102,382,383,385,387,389,391,393,395,397,399,401,403],{"class":104,"line":105},[102,384,109],{"class":108},[102,386,113],{"class":112},[102,388,117],{"class":116},[102,390,215],{"class":177},[102,392,124],{"class":112},[102,394,184],{"class":116},[102,396,284],{"class":123},[102,398,127],{"class":112},[102,400,290],{"class":289},[102,402,168],{"class":112},[102,404,171],{"class":116},[102,406,407,409,411,413,415,417,419,421,423,425],{"class":104,"line":174},[102,408,306],{"class":112},[102,410,184],{"class":116},[102,412,374],{"class":112},[102,414,184],{"class":116},[102,416,311],{"class":112},[102,418,117],{"class":116},[102,420,140],{"class":116},[102,422,318],{"class":143},[102,424,147],{"class":116},[102,426,171],{"class":116},[102,428,429,431,433,435,437,439],{"class":104,"line":303},[102,430,178],{"class":177},[102,432,181],{"class":112},[102,434,184],{"class":116},[102,436,187],{"class":123},[102,438,190],{"class":112},[102,440,171],{"class":116},[80,442,443],{},"This is functionally equivalent to setting the attribute directly on the model instance, but it allows you to work with the attributes as a plain object if needed.",[80,445,446,447,450,451,453,454,456,457,459],{},"This is particularly useful if you have a column which conflicts with a model's property name. For example, if you have a ",[84,448,449],{},"table"," column on your model it would conflict with the ",[84,452,449],{}," property on the model class. In this case, you can set the ",[84,455,449],{}," attribute through the ",[84,458,374],{}," property to avoid the conflict.",[75,461,463],{"id":462},"mass-assignment","Mass Assignment",[80,465,466,467,470,471,184],{},"Vasta also supports mass assignment of attributes through the ",[84,468,469],{},"assign"," method. This allows you to update multiple attributes of a model instance in a single call. This functions similarly to ",[84,472,473],{},"Object.assign(model.attributes, newAttributes)",[93,475,477],{"className":95,"code":476,"language":97,"meta":98,"style":98},"const pet = await Pet.findOrFail(1);\n\npet.assign({\n  name: \"New Name\",\n  counter: pet.counter + 1,\n});\n\nawait pet.save();\n",[84,478,479,503,507,520,536,555,564,569],{"__ignoreMap":98},[102,480,481,483,485,487,489,491,493,495,497,499,501],{"class":104,"line":105},[102,482,109],{"class":108},[102,484,113],{"class":112},[102,486,117],{"class":116},[102,488,215],{"class":177},[102,490,124],{"class":112},[102,492,184],{"class":116},[102,494,284],{"class":123},[102,496,127],{"class":112},[102,498,290],{"class":289},[102,500,168],{"class":112},[102,502,171],{"class":116},[102,504,505],{"class":104,"line":174},[102,506,300],{"emptyLinePlaceholder":299},[102,508,509,511,513,515,517],{"class":104,"line":303},[102,510,306],{"class":112},[102,512,184],{"class":116},[102,514,469],{"class":123},[102,516,127],{"class":112},[102,518,519],{"class":116},"{\n",[102,521,522,525,527,529,531,533],{"class":104,"line":325},[102,523,524],{"class":133},"  name",[102,526,137],{"class":116},[102,528,140],{"class":116},[102,530,318],{"class":143},[102,532,147],{"class":116},[102,534,535],{"class":116},",\n",[102,537,538,541,543,545,547,549,551,553],{"class":104,"line":351},[102,539,540],{"class":133},"  counter",[102,542,137],{"class":116},[102,544,181],{"class":112},[102,546,184],{"class":116},[102,548,332],{"class":112},[102,550,343],{"class":116},[102,552,346],{"class":289},[102,554,535],{"class":116},[102,556,557,560,562],{"class":104,"line":356},[102,558,559],{"class":116},"}",[102,561,168],{"class":112},[102,563,171],{"class":116},[102,565,567],{"class":104,"line":566},7,[102,568,300],{"emptyLinePlaceholder":299},[102,570,572,574,576,578,580,582],{"class":104,"line":571},8,[102,573,178],{"class":177},[102,575,181],{"class":112},[102,577,184],{"class":116},[102,579,187],{"class":123},[102,581,190],{"class":112},[102,583,171],{"class":116},[75,585,587],{"id":586},"dirty-tracking","Dirty Tracking",[80,589,590,591,593],{},"Vasta tracks original values on each model instance and only updates changed fields when calling ",[84,592,90],{}," on existing records.",[595,596,597,604],"ul",{},[598,599,600,603],"li",{},[84,601,602],{},"model.getDirty()"," returns the attributes currently considered dirty.",[598,605,606,609,610,613],{},[84,607,608],{},"model.isDirty()"," returns ",[84,611,612],{},"true"," when there are dirty attributes.",[80,615,616,617,620],{},"Unsaved models are always considered dirty. For a new model, ",[84,618,619],{},"getDirty()"," returns the model's current attributes.",[93,622,624],{"className":95,"code":623,"language":97,"meta":98,"style":98},"const pet = new Pet({ name: \"Fluffy\", type: \"cat\" });\n\npet.isDirty();\n// true (new model, not persisted yet)\n\npet.getDirty();\n// { name: \"Fluffy\", type: \"cat\", counter: 0 }\n// Assuming `counter` has a default value of 0 from the model's default attributes\n\nawait pet.save();\n\npet.isDirty();\n// false\n\npet.counter = pet.counter + 1;\n\npet.getDirty();\n// { counter: 1 }\n\nawait pet.save();\n// Only `counter` is sent in the update payload\n",[84,625,626,671,675,688,694,698,711,716,721,726,741,746,759,765,770,793,798,811,817,822,837],{"__ignoreMap":98},[102,627,628,630,632,634,636,638,640,642,644,646,648,651,653,655,657,659,661,663,665,667,669],{"class":104,"line":105},[102,629,109],{"class":108},[102,631,113],{"class":112},[102,633,117],{"class":116},[102,635,120],{"class":116},[102,637,124],{"class":123},[102,639,127],{"class":112},[102,641,130],{"class":116},[102,643,134],{"class":133},[102,645,137],{"class":116},[102,647,140],{"class":116},[102,649,650],{"class":143},"Fluffy",[102,652,147],{"class":116},[102,654,150],{"class":116},[102,656,153],{"class":133},[102,658,137],{"class":116},[102,660,140],{"class":116},[102,662,247],{"class":143},[102,664,147],{"class":116},[102,666,165],{"class":116},[102,668,168],{"class":112},[102,670,171],{"class":116},[102,672,673],{"class":104,"line":174},[102,674,300],{"emptyLinePlaceholder":299},[102,676,677,679,681,684,686],{"class":104,"line":303},[102,678,306],{"class":112},[102,680,184],{"class":116},[102,682,683],{"class":123},"isDirty",[102,685,190],{"class":112},[102,687,171],{"class":116},[102,689,690],{"class":104,"line":325},[102,691,693],{"class":692},"sHwdD","// true (new model, not persisted yet)\n",[102,695,696],{"class":104,"line":351},[102,697,300],{"emptyLinePlaceholder":299},[102,699,700,702,704,707,709],{"class":104,"line":356},[102,701,306],{"class":112},[102,703,184],{"class":116},[102,705,706],{"class":123},"getDirty",[102,708,190],{"class":112},[102,710,171],{"class":116},[102,712,713],{"class":104,"line":566},[102,714,715],{"class":692},"// { name: \"Fluffy\", type: \"cat\", counter: 0 }\n",[102,717,718],{"class":104,"line":571},[102,719,720],{"class":692},"// Assuming `counter` has a default value of 0 from the model's default attributes\n",[102,722,724],{"class":104,"line":723},9,[102,725,300],{"emptyLinePlaceholder":299},[102,727,729,731,733,735,737,739],{"class":104,"line":728},10,[102,730,178],{"class":177},[102,732,181],{"class":112},[102,734,184],{"class":116},[102,736,187],{"class":123},[102,738,190],{"class":112},[102,740,171],{"class":116},[102,742,744],{"class":104,"line":743},11,[102,745,300],{"emptyLinePlaceholder":299},[102,747,749,751,753,755,757],{"class":104,"line":748},12,[102,750,306],{"class":112},[102,752,184],{"class":116},[102,754,683],{"class":123},[102,756,190],{"class":112},[102,758,171],{"class":116},[102,760,762],{"class":104,"line":761},13,[102,763,764],{"class":692},"// false\n",[102,766,768],{"class":104,"line":767},14,[102,769,300],{"emptyLinePlaceholder":299},[102,771,773,775,777,779,781,783,785,787,789,791],{"class":104,"line":772},15,[102,774,306],{"class":112},[102,776,184],{"class":116},[102,778,332],{"class":112},[102,780,117],{"class":116},[102,782,181],{"class":112},[102,784,184],{"class":116},[102,786,332],{"class":112},[102,788,343],{"class":116},[102,790,346],{"class":289},[102,792,171],{"class":116},[102,794,796],{"class":104,"line":795},16,[102,797,300],{"emptyLinePlaceholder":299},[102,799,801,803,805,807,809],{"class":104,"line":800},17,[102,802,306],{"class":112},[102,804,184],{"class":116},[102,806,706],{"class":123},[102,808,190],{"class":112},[102,810,171],{"class":116},[102,812,814],{"class":104,"line":813},18,[102,815,816],{"class":692},"// { counter: 1 }\n",[102,818,820],{"class":104,"line":819},19,[102,821,300],{"emptyLinePlaceholder":299},[102,823,825,827,829,831,833,835],{"class":104,"line":824},20,[102,826,178],{"class":177},[102,828,181],{"class":112},[102,830,184],{"class":116},[102,832,187],{"class":123},[102,834,190],{"class":112},[102,836,171],{"class":116},[102,838,840],{"class":104,"line":839},21,[102,841,842],{"class":692},"// Only `counter` is sent in the update payload\n",[844,845,846],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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":98,"searchDepth":174,"depth":174,"links":848},[849,850,851,852],{"id":77,"depth":174,"text":78},{"id":258,"depth":174,"text":259},{"id":462,"depth":174,"text":463},{"id":586,"depth":174,"text":587},"Inserting and updating models with Vasta.","md",null,{},{"icon":39},{"description":859,"title":36},"Learn how to insert and update models with Vasta.","aju4C8ROcVYZYM2a7-nabdIq822xQq-6AXSyQc5ZRn8",[862,864],{"title":31,"path":32,"stem":33,"description":863,"icon":34,"children":-1},"Retrieving models with Vasta.",{"title":41,"path":42,"stem":43,"description":865,"icon":44,"children":-1},"Deleting models with Vasta.",1778782558748]