[{"data":1,"prerenderedAt":1632},["ShallowReactive",2],{"navigation":3,"\u002Fwriting\u002Fversioned-rows":307,"\u002Fwriting\u002Fversioned-rows-surround":1627},{"3.x":4,"2.x":203},[5,32,61,99,121,147,165],{"title":6,"icon":7,"path":8,"stem":9,"children":10,"page":31},"Getting Started","i-heroicons-star","\u002Fgetting-started","1.getting-started",[11,15,19,23,27],{"title":12,"path":13,"stem":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":16,"path":17,"stem":18},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":20,"path":21,"stem":22},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":24,"path":25,"stem":26},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F4.configuration",{"title":28,"path":29,"stem":30},"Upgrade guide","\u002Fgetting-started\u002Fupgrade-guide","1.getting-started\u002F5.upgrade-guide",false,{"title":33,"icon":34,"path":35,"stem":36,"children":37,"page":31},"Resources","i-heroicons-document-text","\u002Fresources","2.resources",[38,41,45,49,53,57],{"title":33,"path":39,"stem":40},"\u002Fresources\u002Fresources","2.resources\u002F1.resources",{"title":42,"path":43,"stem":44},"Fields","\u002Fresources\u002Ffields","2.resources\u002F2.fields",{"title":46,"path":47,"stem":48},"Relationships","\u002Fresources\u002Frelations","2.resources\u002F3.relations",{"title":50,"path":51,"stem":52},"Validation","\u002Fresources\u002Fvalidation","2.resources\u002F4.validation",{"title":54,"path":55,"stem":56},"Perimeter","\u002Fresources\u002Fperimeter","2.resources\u002F5.perimeter",{"title":58,"path":59,"stem":60},"Limits","\u002Fresources\u002Flimits","2.resources\u002F6.limits",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":31},"Search","i-heroicons-magnifying-glass","\u002Fsearch","3.search",[67,71,75,79,83,87,91,95],{"title":68,"path":69,"stem":70},"Search overview","\u002Fsearch\u002Foverview","3.search\u002F1.overview",{"title":72,"path":73,"stem":74},"Search filters","\u002Fsearch\u002Ffilters","3.search\u002F2.filters",{"title":76,"path":77,"stem":78},"Sorts and selects","\u002Fsearch\u002Fsorts-and-selects","3.search\u002F3.sorts-and-selects",{"title":80,"path":81,"stem":82},"Includes and aggregates","\u002Fsearch\u002Fincludes-and-aggregates","3.search\u002F4.includes-and-aggregates",{"title":84,"path":85,"stem":86},"Scopes and instructions","\u002Fsearch\u002Fscopes-and-instructions","3.search\u002F5.scopes-and-instructions",{"title":88,"path":89,"stem":90},"Text search","\u002Fsearch\u002Ftext-search","3.search\u002F6.text-search",{"title":92,"path":93,"stem":94},"Search engines","\u002Fsearch\u002Fsearch-engines","3.search\u002F7.search-engines",{"title":96,"path":97,"stem":98},"Searching outside HTTP","\u002Fsearch\u002Foutside-http","3.search\u002F8.outside-http",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":31},"Writing","i-heroicons-pencil-square","\u002Fwriting","4.writing",[105,109,113,117],{"title":106,"path":107,"stem":108},"Mutate","\u002Fwriting\u002Fmutate","4.writing\u002F1.mutate",{"title":110,"path":111,"stem":112},"Writing relations","\u002Fwriting\u002Frelations","4.writing\u002F2.relations",{"title":114,"path":115,"stem":116},"Versioned rows","\u002Fwriting\u002Fversioned-rows","4.writing\u002F3.versioned-rows",{"title":118,"path":119,"stem":120},"Deleting and restoring","\u002Fwriting\u002Fdeleting","4.writing\u002F4.deleting",{"title":122,"icon":123,"path":124,"stem":125,"children":126,"page":31},"Actions and Metrics","i-heroicons-bolt","\u002Factions-and-metrics","5.actions-and-metrics",[127,131,135,139,143],{"title":128,"path":129,"stem":130},"Actions","\u002Factions-and-metrics\u002Factions","5.actions-and-metrics\u002F1.actions",{"title":132,"path":133,"stem":134},"Queued Actions","\u002Factions-and-metrics\u002Fqueued-actions","5.actions-and-metrics\u002F2.queued-actions",{"title":136,"path":137,"stem":138},"Confirmation","\u002Factions-and-metrics\u002Fconfirmation","5.actions-and-metrics\u002F3.confirmation",{"title":140,"path":141,"stem":142},"Metrics","\u002Factions-and-metrics\u002Fmetrics","5.actions-and-metrics\u002F4.metrics",{"title":144,"path":145,"stem":146},"Exports","\u002Factions-and-metrics\u002Fexports","5.actions-and-metrics\u002F5.exports",{"title":148,"icon":149,"path":150,"stem":151,"children":152,"page":31},"Authorization","i-heroicons-lock-closed","\u002Fauthorization","6.authorization",[153,157,161],{"title":154,"path":155,"stem":156},"Policies","\u002Fauthorization\u002Fpolicies","6.authorization\u002F1.policies",{"title":158,"path":159,"stem":160},"Gates","\u002Fauthorization\u002Fgates","6.authorization\u002F2.gates",{"title":162,"path":163,"stem":164},"Decision Cache","\u002Fauthorization\u002Fdecision-cache","6.authorization\u002F3.decision-cache",{"title":166,"icon":167,"path":168,"stem":169,"children":170,"page":31},"Digging Deeper","i-heroicons-list-bullet","\u002Fdigging-deeper","7.digging-deeper",[171,175,179,183,187,191,195,199],{"title":172,"path":173,"stem":174},"Details","\u002Fdigging-deeper\u002Fdetails","7.digging-deeper\u002F1.details",{"title":176,"path":177,"stem":178},"Events and Hooks","\u002Fdigging-deeper\u002Fevents-and-hooks","7.digging-deeper\u002F2.events-and-hooks",{"title":180,"path":181,"stem":182},"Custom Responses","\u002Fdigging-deeper\u002Fresponses","7.digging-deeper\u002F3.responses",{"title":184,"path":185,"stem":186},"OpenAPI Documentation","\u002Fdigging-deeper\u002Fopenapi","7.digging-deeper\u002F4.openapi",{"title":188,"path":189,"stem":190},"Precognition","\u002Fdigging-deeper\u002Fprecognition","7.digging-deeper\u002F5.precognition",{"title":192,"path":193,"stem":194},"Artisan Commands","\u002Fdigging-deeper\u002Fartisan","7.digging-deeper\u002F6.artisan",{"title":196,"path":197,"stem":198},"Laravel Boost Skill","\u002Fdigging-deeper\u002Fai-skill","7.digging-deeper\u002F7.ai-skill",{"title":200,"path":201,"stem":202},"Translations","\u002Fdigging-deeper\u002Ftranslations","7.digging-deeper\u002F8.translations",[204,215,237,260,297],{"title":6,"icon":7,"path":205,"stem":206,"children":207,"page":31},"\u002F2.x\u002Fgetting-started","2.x\u002F1.getting-started",[208,211],{"title":16,"path":209,"stem":210},"\u002F2.x\u002Fgetting-started\u002Finstallation","2.x\u002F1.getting-started\u002F1.installation",{"title":212,"path":213,"stem":214},"Upgrade Guide","\u002F2.x\u002Fgetting-started\u002Fupgrade-guide","2.x\u002F1.getting-started\u002F2.upgrade-guide",{"title":216,"icon":217,"path":218,"stem":219,"children":220,"page":31},"Endpoints","i-heroicons-arrow-uturn-left","\u002F2.x\u002Fendpoints","2.x\u002F2.endpoints",[221,224,227,230,233],{"title":172,"path":222,"stem":223},"\u002F2.x\u002Fendpoints\u002Fdetails","2.x\u002F2.endpoints\u002F1.details",{"title":62,"path":225,"stem":226},"\u002F2.x\u002Fendpoints\u002Fsearch","2.x\u002F2.endpoints\u002F2.search",{"title":106,"path":228,"stem":229},"\u002F2.x\u002Fendpoints\u002Fmutate","2.x\u002F2.endpoints\u002F3.mutate",{"title":128,"path":231,"stem":232},"\u002F2.x\u002Fendpoints\u002Factions","2.x\u002F2.endpoints\u002F4.actions",{"title":234,"path":235,"stem":236},"Delete","\u002F2.x\u002Fendpoints\u002Fdelete","2.x\u002F2.endpoints\u002F5.delete",{"title":33,"icon":34,"path":238,"stem":239,"children":240,"page":31},"\u002F2.x\u002Fresources","2.x\u002F3.resources",[241,245,249,252,256],{"title":242,"path":243,"stem":244},"Basics","\u002F2.x\u002Fresources\u002Fbasics","2.x\u002F3.resources\u002F1.basics",{"title":246,"path":247,"stem":248},"Exposed Data","\u002F2.x\u002Fresources\u002Fexposed-data","2.x\u002F3.resources\u002F2.exposed-data",{"title":46,"path":250,"stem":251},"\u002F2.x\u002Fresources\u002Frelationships","2.x\u002F3.resources\u002F3.relationships",{"title":253,"path":254,"stem":255},"Validations","\u002F2.x\u002Fresources\u002Fvalidations","2.x\u002F3.resources\u002F4.validations",{"title":257,"path":258,"stem":259},"Interactions","\u002F2.x\u002Fresources\u002Finteractions","2.x\u002F3.resources\u002F5.interactions",{"title":166,"icon":167,"path":261,"stem":262,"children":263,"page":31},"\u002F2.x\u002Fdigging-deeper","2.x\u002F4.digging-deeper",[264,267,271,274,278,282,286,290,294],{"title":128,"path":265,"stem":266},"\u002F2.x\u002Fdigging-deeper\u002Factions","2.x\u002F4.digging-deeper\u002F1.actions",{"title":268,"path":269,"stem":270},"Hooks","\u002F2.x\u002Fdigging-deeper\u002Fhooks","2.x\u002F4.digging-deeper\u002F2.hooks",{"title":158,"path":272,"stem":273},"\u002F2.x\u002Fdigging-deeper\u002Fgates","2.x\u002F4.digging-deeper\u002F3.gates",{"title":275,"path":276,"stem":277},"Authorizations","\u002F2.x\u002Fdigging-deeper\u002Fauthorizations","2.x\u002F4.digging-deeper\u002F4.authorizations",{"title":279,"path":280,"stem":281},"Full Text Search","\u002F2.x\u002Fdigging-deeper\u002Ffull-text-search","2.x\u002F4.digging-deeper\u002F5.full-text-search",{"title":283,"path":284,"stem":285},"Instructions","\u002F2.x\u002Fdigging-deeper\u002Finstructions","2.x\u002F4.digging-deeper\u002F6.instructions",{"title":287,"path":288,"stem":289},"Responses","\u002F2.x\u002Fdigging-deeper\u002Fresponses","2.x\u002F4.digging-deeper\u002F7.responses",{"title":291,"path":292,"stem":293},"Documentation","\u002F2.x\u002Fdigging-deeper\u002Fdocumentation","2.x\u002F4.digging-deeper\u002F8.documentation",{"title":188,"path":295,"stem":296},"\u002F2.x\u002Fdigging-deeper\u002Fprecognition","2.x\u002F4.digging-deeper\u002F9.precognition",{"title":298,"icon":299,"path":300,"stem":301,"children":302,"page":31},"Integrations","i-lucide-puzzle","\u002F2.x\u002Fintegrations","2.x\u002F5.integrations",[303],{"title":304,"path":305,"stem":306},"Flutter","\u002F2.x\u002Fintegrations\u002Fflutter","2.x\u002F5.integrations\u002F1.flutter",{"id":308,"title":114,"body":309,"description":1620,"extension":1621,"links":1622,"meta":1623,"navigation":438,"path":115,"seo":1624,"sitemap":1625,"stem":116,"__hash__":1626},"docs3x\u002F4.writing\u002F3.versioned-rows.md",{"type":310,"value":311,"toc":1612},"minimark",[312,325,644,650,655,830,916,937,941,951,1202,1303,1326,1330,1349,1445,1449,1492,1496,1573,1583,1587,1608],[313,314,315,316,320,321,324],"p",{},"Two users open the same product, both edit it, both save: without a check, the second save silently overwrites the first. A versioned resource lets each ",[317,318,319],"code",{},"update"," entry send the version of the row that the client read. When the row has changed since, the whole mutation answers ",[317,322,323],{},"409"," and writes nothing.",[326,327,333],"pre",{"className":328,"code":329,"filename":330,"language":331,"meta":332,"style":332},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","use Lomkit\\Rest\\Fields\\DateTime;\nuse Lomkit\\Rest\\Fields\\ID;\nuse Lomkit\\Rest\\Fields\\Integer;\nuse Lomkit\\Rest\\Fields\\Text;\n\npublic function fields(): array\n{\n    return [\n        ID::make('id'),\n        Integer::make('category_id'),\n        Text::make('name'),\n        Integer::make('price'),\n        DateTime::make('updated_at')->readonly(),\n    ];\n}\n\npublic function versioned(): bool\n{\n    return true;\n}\n","app\u002FRest\u002FResources\u002FProductResource.php","php","",[317,334,335,367,389,411,433,440,460,466,476,504,525,546,566,594,600,606,611,626,631,639],{"__ignoreMap":332},[336,337,340,344,348,352,355,357,359,361,364],"span",{"class":338,"line":339},"line",1,[336,341,343],{"class":342},"sbssI","use",[336,345,347],{"class":346},"sTEyZ"," Lomkit",[336,349,351],{"class":350},"sMK4o","\\",[336,353,354],{"class":346},"Rest",[336,356,351],{"class":350},[336,358,42],{"class":346},[336,360,351],{"class":350},[336,362,363],{"class":346},"DateTime",[336,365,366],{"class":350},";\n",[336,368,370,372,374,376,378,380,382,384,387],{"class":338,"line":369},2,[336,371,343],{"class":342},[336,373,347],{"class":346},[336,375,351],{"class":350},[336,377,354],{"class":346},[336,379,351],{"class":350},[336,381,42],{"class":346},[336,383,351],{"class":350},[336,385,386],{"class":346},"ID",[336,388,366],{"class":350},[336,390,392,394,396,398,400,402,404,406,409],{"class":338,"line":391},3,[336,393,343],{"class":342},[336,395,347],{"class":346},[336,397,351],{"class":350},[336,399,354],{"class":346},[336,401,351],{"class":350},[336,403,42],{"class":346},[336,405,351],{"class":350},[336,407,408],{"class":346},"Integer",[336,410,366],{"class":350},[336,412,414,416,418,420,422,424,426,428,431],{"class":338,"line":413},4,[336,415,343],{"class":342},[336,417,347],{"class":346},[336,419,351],{"class":350},[336,421,354],{"class":346},[336,423,351],{"class":350},[336,425,42],{"class":346},[336,427,351],{"class":350},[336,429,430],{"class":346},"Text",[336,432,366],{"class":350},[336,434,436],{"class":338,"line":435},5,[336,437,439],{"emptyLinePlaceholder":438},true,"\n",[336,441,443,447,450,454,457],{"class":338,"line":442},6,[336,444,446],{"class":445},"spNyl","public",[336,448,449],{"class":445}," function",[336,451,453],{"class":452},"s2Zo4"," fields",[336,455,456],{"class":350},"():",[336,458,459],{"class":342}," array\n",[336,461,463],{"class":338,"line":462},7,[336,464,465],{"class":350},"{\n",[336,467,469,473],{"class":338,"line":468},8,[336,470,472],{"class":471},"s7zQu","    return",[336,474,475],{"class":350}," [\n",[336,477,479,483,486,489,492,495,499,501],{"class":338,"line":478},9,[336,480,482],{"class":481},"sBMFI","        ID",[336,484,485],{"class":350},"::",[336,487,488],{"class":452},"make",[336,490,491],{"class":350},"(",[336,493,494],{"class":350},"'",[336,496,498],{"class":497},"sfazB","id",[336,500,494],{"class":350},[336,502,503],{"class":350},"),\n",[336,505,507,510,512,514,516,518,521,523],{"class":338,"line":506},10,[336,508,509],{"class":481},"        Integer",[336,511,485],{"class":350},[336,513,488],{"class":452},[336,515,491],{"class":350},[336,517,494],{"class":350},[336,519,520],{"class":497},"category_id",[336,522,494],{"class":350},[336,524,503],{"class":350},[336,526,528,531,533,535,537,539,542,544],{"class":338,"line":527},11,[336,529,530],{"class":481},"        Text",[336,532,485],{"class":350},[336,534,488],{"class":452},[336,536,491],{"class":350},[336,538,494],{"class":350},[336,540,541],{"class":497},"name",[336,543,494],{"class":350},[336,545,503],{"class":350},[336,547,549,551,553,555,557,559,562,564],{"class":338,"line":548},12,[336,550,509],{"class":481},[336,552,485],{"class":350},[336,554,488],{"class":452},[336,556,491],{"class":350},[336,558,494],{"class":350},[336,560,561],{"class":497},"price",[336,563,494],{"class":350},[336,565,503],{"class":350},[336,567,569,572,574,576,578,580,583,585,588,591],{"class":338,"line":568},13,[336,570,571],{"class":481},"        DateTime",[336,573,485],{"class":350},[336,575,488],{"class":452},[336,577,491],{"class":350},[336,579,494],{"class":350},[336,581,582],{"class":497},"updated_at",[336,584,494],{"class":350},[336,586,587],{"class":350},")->",[336,589,590],{"class":452},"readonly",[336,592,593],{"class":350},"(),\n",[336,595,597],{"class":338,"line":596},14,[336,598,599],{"class":350},"    ];\n",[336,601,603],{"class":338,"line":602},15,[336,604,605],{"class":350},"}\n",[336,607,609],{"class":338,"line":608},16,[336,610,439],{"emptyLinePlaceholder":438},[336,612,614,616,618,621,623],{"class":338,"line":613},17,[336,615,446],{"class":445},[336,617,449],{"class":445},[336,619,620],{"class":452}," versioned",[336,622,456],{"class":350},[336,624,625],{"class":342}," bool\n",[336,627,629],{"class":338,"line":628},18,[336,630,465],{"class":350},[336,632,634,636],{"class":338,"line":633},19,[336,635,472],{"class":471},[336,637,638],{"class":350}," true;\n",[336,640,642],{"class":338,"line":641},20,[336,643,605],{"class":350},[313,645,646,647,649],{},"The version of a row is its ",[317,648,582],{},", as the search returns it.",[651,652,654],"h2",{"id":653},"sending-a-version","Sending a version",[326,656,661],{"className":657,"code":658,"filename":659,"language":660,"meta":332,"style":332},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"mutate\": [\n    {\"operation\": \"update\", \"key\": 1, \"version\": \"2026-01-01T08:00:00.000000Z\", \"attributes\": {\"name\": \"Desk light\"}}\n  ],\n  \"response\": {\n    \"selects\": [{\"field\": \"updated_at\"}]\n  }\n}\n","POST \u002Fapi\u002Fproducts\u002Fmutate","json",[317,662,663,667,683,769,774,788,821,826],{"__ignoreMap":332},[336,664,665],{"class":338,"line":339},[336,666,465],{"class":350},[336,668,669,672,675,678,681],{"class":338,"line":369},[336,670,671],{"class":350},"  \"",[336,673,674],{"class":445},"mutate",[336,676,677],{"class":350},"\"",[336,679,680],{"class":350},":",[336,682,475],{"class":350},[336,684,685,688,690,693,695,697,700,702,704,707,709,712,714,716,719,721,723,726,728,730,732,735,737,739,741,744,746,748,751,753,755,757,759,761,764,766],{"class":338,"line":391},[336,686,687],{"class":350},"    {",[336,689,677],{"class":350},[336,691,692],{"class":481},"operation",[336,694,677],{"class":350},[336,696,680],{"class":350},[336,698,699],{"class":350}," \"",[336,701,319],{"class":497},[336,703,677],{"class":350},[336,705,706],{"class":350},",",[336,708,699],{"class":350},[336,710,711],{"class":481},"key",[336,713,677],{"class":350},[336,715,680],{"class":350},[336,717,718],{"class":342}," 1",[336,720,706],{"class":350},[336,722,699],{"class":350},[336,724,725],{"class":481},"version",[336,727,677],{"class":350},[336,729,680],{"class":350},[336,731,699],{"class":350},[336,733,734],{"class":497},"2026-01-01T08:00:00.000000Z",[336,736,677],{"class":350},[336,738,706],{"class":350},[336,740,699],{"class":350},[336,742,743],{"class":481},"attributes",[336,745,677],{"class":350},[336,747,680],{"class":350},[336,749,750],{"class":350}," {",[336,752,677],{"class":350},[336,754,541],{"class":342},[336,756,677],{"class":350},[336,758,680],{"class":350},[336,760,699],{"class":350},[336,762,763],{"class":497},"Desk light",[336,765,677],{"class":350},[336,767,768],{"class":350},"}}\n",[336,770,771],{"class":338,"line":413},[336,772,773],{"class":350},"  ],\n",[336,775,776,778,781,783,785],{"class":338,"line":435},[336,777,671],{"class":350},[336,779,780],{"class":445},"response",[336,782,677],{"class":350},[336,784,680],{"class":350},[336,786,787],{"class":350}," {\n",[336,789,790,793,796,798,800,803,805,808,810,812,814,816,818],{"class":338,"line":442},[336,791,792],{"class":350},"    \"",[336,794,795],{"class":481},"selects",[336,797,677],{"class":350},[336,799,680],{"class":350},[336,801,802],{"class":350}," [{",[336,804,677],{"class":350},[336,806,807],{"class":342},"field",[336,809,677],{"class":350},[336,811,680],{"class":350},[336,813,699],{"class":350},[336,815,582],{"class":497},[336,817,677],{"class":350},[336,819,820],{"class":350},"}]\n",[336,822,823],{"class":338,"line":462},[336,824,825],{"class":350},"  }\n",[336,827,828],{"class":338,"line":468},[336,829,605],{"class":350},[326,831,834],{"className":657,"code":832,"filename":833,"language":660,"meta":332,"style":332},"{\n  \"operations\": [{\"operation\": \"update\", \"key\": 1}],\n  \"records\": [{\"updated_at\": \"2026-03-01T10:00:00.000000Z\"}]\n}\n","200 OK",[317,835,836,840,882,912],{"__ignoreMap":332},[336,837,838],{"class":338,"line":339},[336,839,465],{"class":350},[336,841,842,844,847,849,851,853,855,857,859,861,863,865,867,869,871,873,875,877,879],{"class":338,"line":369},[336,843,671],{"class":350},[336,845,846],{"class":445},"operations",[336,848,677],{"class":350},[336,850,680],{"class":350},[336,852,802],{"class":350},[336,854,677],{"class":350},[336,856,692],{"class":481},[336,858,677],{"class":350},[336,860,680],{"class":350},[336,862,699],{"class":350},[336,864,319],{"class":497},[336,866,677],{"class":350},[336,868,706],{"class":350},[336,870,699],{"class":350},[336,872,711],{"class":481},[336,874,677],{"class":350},[336,876,680],{"class":350},[336,878,718],{"class":342},[336,880,881],{"class":350},"}],\n",[336,883,884,886,889,891,893,895,897,899,901,903,905,908,910],{"class":338,"line":391},[336,885,671],{"class":350},[336,887,888],{"class":445},"records",[336,890,677],{"class":350},[336,892,680],{"class":350},[336,894,802],{"class":350},[336,896,677],{"class":350},[336,898,582],{"class":481},[336,900,677],{"class":350},[336,902,680],{"class":350},[336,904,699],{"class":350},[336,906,907],{"class":497},"2026-03-01T10:00:00.000000Z",[336,909,677],{"class":350},[336,911,820],{"class":350},[336,913,914],{"class":338,"line":413},[336,915,605],{"class":350},[917,918,919,928,934],"ul",{},[920,921,922,924,925,927],"li",{},[317,923,725],{}," is optional: an ",[317,926,319],{}," entry without it writes as before.",[920,929,930,931,933],{},"To save a row twice, read its new version from ",[317,932,888],{},", as above.",[920,935,936],{},"Every entry is compared with the version that the row had before the first write of the request: two entries on the same row can send the same version.",[651,938,940],{"id":939},"conflicts","Conflicts",[313,942,943,944,946,947,950],{},"When a row has another version, the mutation answers ",[317,945,323],{},", runs no hook, dispatches no ",[317,948,949],{},"ResourceMutated"," and writes nothing, not even the entries that hold no conflict:",[326,952,954],{"className":657,"code":953,"filename":659,"language":660,"meta":332,"style":332},"{\n  \"mutate\": [\n    {\"operation\": \"update\", \"key\": 1, \"version\": \"2026-01-01T08:00:00.000000Z\", \"attributes\": {\"name\": \"Desk light\"}},\n    {\"operation\": \"update\", \"key\": 2, \"version\": \"2026-01-02T08:00:00.000000Z\", \"attributes\": {\"price\": 99}},\n    {\"operation\": \"create\", \"attributes\": {\"category_id\": 1, \"name\": \"Wall lamp\", \"price\": 45}}\n  ]\n}\n",[317,955,956,960,972,1047,1120,1193,1198],{"__ignoreMap":332},[336,957,958],{"class":338,"line":339},[336,959,465],{"class":350},[336,961,962,964,966,968,970],{"class":338,"line":369},[336,963,671],{"class":350},[336,965,674],{"class":445},[336,967,677],{"class":350},[336,969,680],{"class":350},[336,971,475],{"class":350},[336,973,974,976,978,980,982,984,986,988,990,992,994,996,998,1000,1002,1004,1006,1008,1010,1012,1014,1016,1018,1020,1022,1024,1026,1028,1030,1032,1034,1036,1038,1040,1042,1044],{"class":338,"line":391},[336,975,687],{"class":350},[336,977,677],{"class":350},[336,979,692],{"class":481},[336,981,677],{"class":350},[336,983,680],{"class":350},[336,985,699],{"class":350},[336,987,319],{"class":497},[336,989,677],{"class":350},[336,991,706],{"class":350},[336,993,699],{"class":350},[336,995,711],{"class":481},[336,997,677],{"class":350},[336,999,680],{"class":350},[336,1001,718],{"class":342},[336,1003,706],{"class":350},[336,1005,699],{"class":350},[336,1007,725],{"class":481},[336,1009,677],{"class":350},[336,1011,680],{"class":350},[336,1013,699],{"class":350},[336,1015,734],{"class":497},[336,1017,677],{"class":350},[336,1019,706],{"class":350},[336,1021,699],{"class":350},[336,1023,743],{"class":481},[336,1025,677],{"class":350},[336,1027,680],{"class":350},[336,1029,750],{"class":350},[336,1031,677],{"class":350},[336,1033,541],{"class":342},[336,1035,677],{"class":350},[336,1037,680],{"class":350},[336,1039,699],{"class":350},[336,1041,763],{"class":497},[336,1043,677],{"class":350},[336,1045,1046],{"class":350},"}},\n",[336,1048,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067,1069,1071,1073,1075,1078,1080,1082,1084,1086,1088,1090,1093,1095,1097,1099,1101,1103,1105,1107,1109,1111,1113,1115,1118],{"class":338,"line":413},[336,1050,687],{"class":350},[336,1052,677],{"class":350},[336,1054,692],{"class":481},[336,1056,677],{"class":350},[336,1058,680],{"class":350},[336,1060,699],{"class":350},[336,1062,319],{"class":497},[336,1064,677],{"class":350},[336,1066,706],{"class":350},[336,1068,699],{"class":350},[336,1070,711],{"class":481},[336,1072,677],{"class":350},[336,1074,680],{"class":350},[336,1076,1077],{"class":342}," 2",[336,1079,706],{"class":350},[336,1081,699],{"class":350},[336,1083,725],{"class":481},[336,1085,677],{"class":350},[336,1087,680],{"class":350},[336,1089,699],{"class":350},[336,1091,1092],{"class":497},"2026-01-02T08:00:00.000000Z",[336,1094,677],{"class":350},[336,1096,706],{"class":350},[336,1098,699],{"class":350},[336,1100,743],{"class":481},[336,1102,677],{"class":350},[336,1104,680],{"class":350},[336,1106,750],{"class":350},[336,1108,677],{"class":350},[336,1110,561],{"class":342},[336,1112,677],{"class":350},[336,1114,680],{"class":350},[336,1116,1117],{"class":342}," 99",[336,1119,1046],{"class":350},[336,1121,1122,1124,1126,1128,1130,1132,1134,1137,1139,1141,1143,1145,1147,1149,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1176,1178,1180,1182,1184,1186,1188,1191],{"class":338,"line":435},[336,1123,687],{"class":350},[336,1125,677],{"class":350},[336,1127,692],{"class":481},[336,1129,677],{"class":350},[336,1131,680],{"class":350},[336,1133,699],{"class":350},[336,1135,1136],{"class":497},"create",[336,1138,677],{"class":350},[336,1140,706],{"class":350},[336,1142,699],{"class":350},[336,1144,743],{"class":481},[336,1146,677],{"class":350},[336,1148,680],{"class":350},[336,1150,750],{"class":350},[336,1152,677],{"class":350},[336,1154,520],{"class":342},[336,1156,677],{"class":350},[336,1158,680],{"class":350},[336,1160,718],{"class":342},[336,1162,706],{"class":350},[336,1164,699],{"class":350},[336,1166,541],{"class":342},[336,1168,677],{"class":350},[336,1170,680],{"class":350},[336,1172,699],{"class":350},[336,1174,1175],{"class":497},"Wall lamp",[336,1177,677],{"class":350},[336,1179,706],{"class":350},[336,1181,699],{"class":350},[336,1183,561],{"class":342},[336,1185,677],{"class":350},[336,1187,680],{"class":350},[336,1189,1190],{"class":342}," 45",[336,1192,768],{"class":350},[336,1194,1195],{"class":338,"line":442},[336,1196,1197],{"class":350},"  ]\n",[336,1199,1200],{"class":338,"line":462},[336,1201,605],{"class":350},[326,1203,1206],{"className":657,"code":1204,"filename":1205,"language":660,"meta":332,"style":332},"{\n  \"message\": \"The record was changed by another request.\",\n  \"conflicts\": [\n    {\"path\": \"mutate.1\", \"key\": 2, \"version\": \"2026-03-01T10:00:00.000000Z\"}\n  ]\n}\n","409 Conflict",[317,1207,1208,1212,1233,1245,1295,1299],{"__ignoreMap":332},[336,1209,1210],{"class":338,"line":339},[336,1211,465],{"class":350},[336,1213,1214,1216,1219,1221,1223,1225,1228,1230],{"class":338,"line":369},[336,1215,671],{"class":350},[336,1217,1218],{"class":445},"message",[336,1220,677],{"class":350},[336,1222,680],{"class":350},[336,1224,699],{"class":350},[336,1226,1227],{"class":497},"The record was changed by another request.",[336,1229,677],{"class":350},[336,1231,1232],{"class":350},",\n",[336,1234,1235,1237,1239,1241,1243],{"class":338,"line":391},[336,1236,671],{"class":350},[336,1238,939],{"class":445},[336,1240,677],{"class":350},[336,1242,680],{"class":350},[336,1244,475],{"class":350},[336,1246,1247,1249,1251,1254,1256,1258,1260,1263,1265,1267,1269,1271,1273,1275,1277,1279,1281,1283,1285,1287,1289,1291,1293],{"class":338,"line":413},[336,1248,687],{"class":350},[336,1250,677],{"class":350},[336,1252,1253],{"class":481},"path",[336,1255,677],{"class":350},[336,1257,680],{"class":350},[336,1259,699],{"class":350},[336,1261,1262],{"class":497},"mutate.1",[336,1264,677],{"class":350},[336,1266,706],{"class":350},[336,1268,699],{"class":350},[336,1270,711],{"class":481},[336,1272,677],{"class":350},[336,1274,680],{"class":350},[336,1276,1077],{"class":342},[336,1278,706],{"class":350},[336,1280,699],{"class":350},[336,1282,725],{"class":481},[336,1284,677],{"class":350},[336,1286,680],{"class":350},[336,1288,699],{"class":350},[336,1290,907],{"class":497},[336,1292,677],{"class":350},[336,1294,605],{"class":350},[336,1296,1297],{"class":338,"line":435},[336,1298,1197],{"class":350},[336,1300,1301],{"class":338,"line":442},[336,1302,605],{"class":350},[917,1304,1305,1323],{},[920,1306,1307,1309,1310,1312,1313,1315,1316,1318,1319,1322],{},[317,1308,939],{}," lists every entry whose version differs: its ",[317,1311,1253],{}," in the payload, the ",[317,1314,711],{}," of the row, and the ",[317,1317,725],{}," of the row now, or ",[317,1320,1321],{},"null"," when the row is gone.",[920,1324,1325],{},"A client shows the conflict, reloads the row and lets the user save again with the new version.",[651,1327,1329],{"id":1328},"nested-entries-and-key-lists","Nested entries and key lists",[917,1331,1332,1346],{},[920,1333,1334,1335,1338,1339,1341,1342,1345],{},"Entries under ",[317,1336,1337],{},"relations"," accept ",[317,1340,725],{}," when their resource is versioned, with paths such as ",[317,1343,1344],{},"mutate.0.relations.products.1",".",[920,1347,1348],{},"With a list of keys, every row of the list has to hold that version. Each key whose version differs gives one conflict, under the path of the entry:",[326,1350,1352],{"className":657,"code":1351,"filename":1205,"language":660,"meta":332,"style":332},"{\n  \"message\": \"The record was changed by another request.\",\n  \"conflicts\": [\n    {\"path\": \"mutate.0.relations.products.0\", \"key\": 2, \"version\": \"2026-01-02T08:00:00.000000Z\"}\n  ]\n}\n",[317,1353,1354,1358,1376,1388,1437,1441],{"__ignoreMap":332},[336,1355,1356],{"class":338,"line":339},[336,1357,465],{"class":350},[336,1359,1360,1362,1364,1366,1368,1370,1372,1374],{"class":338,"line":369},[336,1361,671],{"class":350},[336,1363,1218],{"class":445},[336,1365,677],{"class":350},[336,1367,680],{"class":350},[336,1369,699],{"class":350},[336,1371,1227],{"class":497},[336,1373,677],{"class":350},[336,1375,1232],{"class":350},[336,1377,1378,1380,1382,1384,1386],{"class":338,"line":391},[336,1379,671],{"class":350},[336,1381,939],{"class":445},[336,1383,677],{"class":350},[336,1385,680],{"class":350},[336,1387,475],{"class":350},[336,1389,1390,1392,1394,1396,1398,1400,1402,1405,1407,1409,1411,1413,1415,1417,1419,1421,1423,1425,1427,1429,1431,1433,1435],{"class":338,"line":413},[336,1391,687],{"class":350},[336,1393,677],{"class":350},[336,1395,1253],{"class":481},[336,1397,677],{"class":350},[336,1399,680],{"class":350},[336,1401,699],{"class":350},[336,1403,1404],{"class":497},"mutate.0.relations.products.0",[336,1406,677],{"class":350},[336,1408,706],{"class":350},[336,1410,699],{"class":350},[336,1412,711],{"class":481},[336,1414,677],{"class":350},[336,1416,680],{"class":350},[336,1418,1077],{"class":342},[336,1420,706],{"class":350},[336,1422,699],{"class":350},[336,1424,725],{"class":481},[336,1426,677],{"class":350},[336,1428,680],{"class":350},[336,1430,699],{"class":350},[336,1432,1092],{"class":497},[336,1434,677],{"class":350},[336,1436,605],{"class":350},[336,1438,1439],{"class":338,"line":435},[336,1440,1197],{"class":350},[336,1442,1443],{"class":338,"line":442},[336,1444,605],{"class":350},[651,1446,1448],{"id":1447},"when-the-check-runs","When the check runs",[917,1450,1451,1462,1474,1481],{},[920,1452,1453,1454,1457,1458,1461],{},"In the transaction of the mutation, after the row checks and before ",[317,1455,1456],{},"mutatingAll()",". A row that a policy refuses answers ",[317,1459,1460],{},"403"," first.",[920,1463,1464,1465,1470,1471,1473],{},"Before a ",[1466,1467,1469],"a",{"href":1468},"\u002Factions-and-metrics\u002Fconfirmation#confirming-writes","confirmation",": a conflict answers ",[317,1472,323],{},", and the resource asks for no confirmation.",[920,1475,1476,1477,1480],{},"One ",[317,1478,1479],{},"SELECT ... FOR UPDATE"," per resource reads the rows again, so that no other request changes them before the commit.",[920,1482,1483,1484,1487,1488,1345],{},"With ",[317,1485,1486],{},"transactions.attempts"," above 1, each attempt runs the check again, see ",[1466,1489,1491],{"href":1490},"\u002Fwriting\u002Fmutate#deadlock-retries","Deadlock retries",[651,1493,1495],{"id":1494},"rules","Rules",[917,1497,1498,1506,1522,1534,1547,1560],{},[920,1499,1500,1502,1503],{},[317,1501,725],{}," on a resource that is not versioned gives ",[317,1504,1505],{},"The mutate.0.version field is prohibited.",[920,1507,1508,1510,1511,1513,1514,1517,1518,1521],{},[317,1509,725],{}," on an operation other than ",[317,1512,319],{}," gives ",[317,1515,1516],{},"The mutate.0.version field is prohibited when mutate.0.operation is create.",", or ",[317,1519,1520],{},"... when mutate.0.relations.products.0.operation is attach."," under a relation.",[920,1523,1524,1526,1527,1530,1531,1533],{},[317,1525,725],{}," must be a string: ",[317,1528,1529],{},"The mutate.0.version field must be a string.",", ",[317,1532,1321],{}," included.",[920,1535,1536,1530,1539,1542,1543,1546],{},[317,1537,1538],{},"destroy",[317,1540,1541],{},"restore"," and ",[317,1544,1545],{},"forceDestroy"," take no version.",[920,1548,1549,1552,1553,1556,1557],{},[317,1550,1551],{},"versioned()"," on a model without timestamps throws ",[317,1554,1555],{},"InvalidResourceException",": ",[317,1558,1559],{},"The resource [App\\Rest\\Resources\\ProductResource] returns true from versioned(), but its model does not use timestamps. The version of a row is its updated_at column: turn the timestamps of the model on, or return false from versioned().",[920,1561,1562,1564,1565,1567,1568,1556,1570],{},[317,1563,1551],{}," without the ",[317,1566,582],{}," field throws ",[317,1569,1555],{},[317,1571,1572],{},"The resource [App\\Rest\\Resources\\ProductResource] returns true from versioned(), but does not declare the field [updated_at]. The version of a row is this column as the field returns it: declare it, for example DateTime::make('updated_at')->readonly().",[1574,1575,1576],"warning",{},[313,1577,1578,1579,1582],{},"Store the timestamps with microseconds: ",[317,1580,1581],{},"$table->timestamps(precision: 6)",". With seconds, two saves in the same second give the same version, and the second one is not detected.",[651,1584,1586],{"id":1585},"openapi","OpenAPI",[313,1588,1589,1590,1592,1593,1595,1596,1598,1599,1601,1602,1605,1606,1345],{},"The ",[317,1591,319],{}," entries of a versioned resource document ",[317,1594,725],{},", typed like its ",[317,1597,582],{}," field. A mutate operation that writes a versioned resource, at its root or under its relations, documents the ",[317,1600,323],{}," response with the shared ",[317,1603,1604],{},"RestConflict"," component. See ",[1466,1607,1586],{"href":185},[1609,1610,1611],"style",{},"html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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);}",{"title":332,"searchDepth":339,"depth":369,"links":1613},[1614,1615,1616,1617,1618,1619],{"id":653,"depth":369,"text":654},{"id":939,"depth":369,"text":940},{"id":1328,"depth":369,"text":1329},{"id":1447,"depth":369,"text":1448},{"id":1494,"depth":369,"text":1495},{"id":1585,"depth":369,"text":1586},"Refuse an update of a row that another request changed since the client read it, with a 409 that lists every conflict.","md",null,{},{"title":114,"description":1620},{"loc":115},"BRrhNoL3QD3OnYaj9iUdK4Gwf12pEDn7nEG5YQl21Pg",[1628,1630],{"title":110,"path":111,"stem":112,"description":1629,"children":-1},"Create, update, attach, detach, sync, toggle and delete related rows in a mutate entry, and write pivot fields with their rules.",{"title":118,"path":119,"stem":120,"description":1631,"children":-1},"Delete, restore and force delete rows by key with destroy, restore and forceDestroy, in one transaction with per-row policy checks.",1794181354889]