[{"data":1,"prerenderedAt":872},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Fmulti-tenancy":193,"\u002Fguides\u002Fmulti-tenancy-surround":867},[4,27,49,99,149,169,183],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":26},"Getting Started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,14,18,22],{"title":11,"path":12,"stem":13},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction",{"title":15,"path":16,"stem":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation",{"title":19,"path":20,"stem":21},"Quick Start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start",{"title":23,"path":24,"stem":25},"Existing Application","\u002Fgetting-started\u002Fexisting-application","1.getting-started\u002F4.existing-application",false,{"title":28,"icon":29,"path":30,"stem":31,"children":32,"page":26},"Concepts","i-lucide-layers","\u002Fconcepts","2.concepts",[33,37,41,45],{"title":34,"path":35,"stem":36},"Layers","\u002Fconcepts\u002Flayers","2.concepts\u002F1.layers",{"title":38,"path":39,"stem":40},"Buckets","\u002Fconcepts\u002Fbuckets","2.concepts\u002F2.buckets",{"title":42,"path":43,"stem":44},"Boundaries","\u002Fconcepts\u002Fboundaries","2.concepts\u002F3.boundaries",{"title":46,"path":47,"stem":48},"Service Providers","\u002Fconcepts\u002Fservice-providers","2.concepts\u002F4.service-providers",{"title":50,"icon":51,"path":52,"stem":53,"children":54,"page":26},"Guides","i-lucide-book-marked","\u002Fguides","3.guides",[55,59,63,67,71,75,79,83,87,91,95],{"title":56,"path":57,"stem":58},"Add a Domain","\u002Fguides\u002Fadd-a-domain","3.guides\u002F01.add-a-domain",{"title":60,"path":61,"stem":62},"Share Code Between Layers","\u002Fguides\u002Fshare-code-between-layers","3.guides\u002F02.share-code-between-layers",{"title":64,"path":65,"stem":66},"Routes","\u002Fguides\u002Froutes","3.guides\u002F03.routes",{"title":68,"path":69,"stem":70},"Views and Components","\u002Fguides\u002Fviews-and-components","3.guides\u002F04.views-and-components",{"title":72,"path":73,"stem":74},"Seeders","\u002Fguides\u002Fseeders","3.guides\u002F05.seeders",{"title":76,"path":77,"stem":78},"Configuration","\u002Fguides\u002Fconfiguration","3.guides\u002F06.configuration",{"title":80,"path":81,"stem":82},"Events","\u002Fguides\u002Fevents","3.guides\u002F07.events",{"title":84,"path":85,"stem":86},"Tests and CI","\u002Fguides\u002Ftesting-and-ci","3.guides\u002F08.testing-and-ci",{"title":88,"path":89,"stem":90},"Production","\u002Fguides\u002Fproduction","3.guides\u002F09.production",{"title":92,"path":93,"stem":94},"Remove a Layer","\u002Fguides\u002Fremoving-a-layer","3.guides\u002F10.removing-a-layer",{"title":96,"path":97,"stem":98},"Multi-tenancy","\u002Fguides\u002Fmulti-tenancy","3.guides\u002F11.multi-tenancy",{"title":100,"icon":101,"path":102,"stem":103,"children":104,"page":26},"Commands","i-lucide-terminal","\u002Fcommands","4.commands",[105,109,113,117,121,125,129,133,137,141,145],{"title":106,"path":107,"stem":108},"Overview","\u002Fcommands\u002Foverview","4.commands\u002F01.overview",{"title":110,"path":111,"stem":112},"osdd:start","\u002Fcommands\u002Fosdd-start","4.commands\u002F02.osdd-start",{"title":114,"path":115,"stem":116},"osdd:layer","\u002Fcommands\u002Fosdd-layer","4.commands\u002F03.osdd-layer",{"title":118,"path":119,"stem":120},"osdd:list","\u002Fcommands\u002Fosdd-list","4.commands\u002F04.osdd-list",{"title":122,"path":123,"stem":124},"osdd:check","\u002Fcommands\u002Fosdd-check","4.commands\u002F05.osdd-check",{"title":126,"path":127,"stem":128},"osdd:graph","\u002Fcommands\u002Fosdd-graph","4.commands\u002F06.osdd-graph",{"title":130,"path":131,"stem":132},"osdd:seed","\u002Fcommands\u002Fosdd-seed","4.commands\u002F07.osdd-seed",{"title":134,"path":135,"stem":136},"osdd:phpunit","\u002Fcommands\u002Fosdd-phpunit","4.commands\u002F08.osdd-phpunit",{"title":138,"path":139,"stem":140},"osdd:remove","\u002Fcommands\u002Fosdd-remove","4.commands\u002F09.osdd-remove",{"title":142,"path":143,"stem":144},"osdd:cache","\u002Fcommands\u002Fosdd-cache","4.commands\u002F10.osdd-cache",{"title":146,"path":147,"stem":148},"Generators","\u002Fcommands\u002Fmake-commands","4.commands\u002F11.make-commands",{"title":150,"icon":151,"path":152,"stem":153,"children":154,"page":26},"API Reference","i-lucide-book-open","\u002Fapi-reference","5.api-reference",[155,159,162,166],{"title":156,"path":157,"stem":158},"LayerServiceProvider","\u002Fapi-reference\u002Flayer-service-provider","5.api-reference\u002F1.layer-service-provider",{"title":34,"path":160,"stem":161},"\u002Fapi-reference\u002Flayers","5.api-reference\u002F2.layers",{"title":163,"path":164,"stem":165},"SeederRegistry","\u002Fapi-reference\u002Fseeder-registry","5.api-reference\u002F3.seeder-registry",{"title":76,"path":167,"stem":168},"\u002Fapi-reference\u002Fconfiguration","5.api-reference\u002F4.configuration",{"title":170,"icon":171,"path":172,"stem":173,"children":174,"page":26},"Integrations","i-lucide-puzzle","\u002Fintegrations","6.integrations",[175,179],{"title":176,"path":177,"stem":178},"Laravel Boost","\u002Fintegrations\u002Flaravel-boost","6.integrations\u002F1.laravel-boost",{"title":180,"path":181,"stem":182},"Tinker and IDE Helper","\u002Fintegrations\u002Ftinker-and-ide-helper","6.integrations\u002F2.tinker-and-ide-helper",{"title":184,"icon":185,"path":186,"stem":187,"children":188,"page":26},"Upgrade","i-lucide-arrow-up-circle","\u002Fupgrade","7.upgrade",[189],{"title":190,"path":191,"stem":192},"Upgrade from 2.x","\u002Fupgrade\u002Ffrom-2x","7.upgrade\u002F1.from-2x",{"id":194,"title":96,"body":195,"description":860,"extension":861,"links":862,"meta":863,"navigation":584,"path":97,"seo":864,"sitemap":865,"stem":98,"__hash__":866},"docs\u002F3.guides\u002F11.multi-tenancy.md",{"type":196,"value":197,"toc":853},"minimark",[198,202,207,218,241,245,274,277,281,304,381,539,549,553,566,744,747,810,832,836,849],[199,200,201],"p",{},"OSDD has no tenancy concept: tenancy belongs to the tenancy package and to your application. A multi-tenant OSDD project only needs plain Laravel and a few lines of configuration. This recipe keeps the tenant migrations and seeders of each layer apart from the central ones, and hands them to the tenancy package.",[203,204,206],"h2",{"id":205},"_1-keep-tenant-migrations-in-a-sub-folder-of-each-layer","1. Keep tenant migrations in a sub-folder of each layer",[208,209,214],"pre",{"className":210,"code":212,"language":213},[211],"language-text","functional\u002Fbilling\u002Fdatabase\u002Fmigrations\u002F          ← central migrations\nfunctional\u002Fbilling\u002Fdatabase\u002Fmigrations\u002Ftenant\u002F   ← tenant migrations\n","text",[215,216,212],"code",{"__ignoreMap":217},"",[199,219,220,221,224,225,228,229,232,233,236,237,240],{},"Laravel's migrator does not read sub-folders, so the ",[215,222,223],{},"loadMigrationsFrom(__DIR__ . '\u002F..\u002F..\u002Fdatabase\u002Fmigrations')"," call of the layer provider never loads the ",[215,226,227],{},"tenant\u002F"," folder. ",[215,230,231],{},"migrate",", ",[215,234,235],{},"migrate:fresh"," and ",[215,238,239],{},"RefreshDatabase"," only see the central migrations.",[203,242,244],{"id":243},"_2-create-a-tenant-migration-with-laravels-path-option","2. Create a tenant migration with Laravel's --path option",[208,246,250],{"className":247,"code":248,"language":249,"meta":217,"style":217},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","php artisan make:migration create_invoices_table --path=functional\u002Fbilling\u002Fdatabase\u002Fmigrations\u002Ftenant\n","bash",[215,251,252],{"__ignoreMap":217},[253,254,257,261,265,268,271],"span",{"class":255,"line":256},"line",1,[253,258,260],{"class":259},"sBMFI","php",[253,262,264],{"class":263},"sfazB"," artisan",[253,266,267],{"class":263}," make:migration",[253,269,270],{"class":263}," create_invoices_table",[253,272,273],{"class":263}," --path=functional\u002Fbilling\u002Fdatabase\u002Fmigrations\u002Ftenant\n",[199,275,276],{},"Nothing is registered in the layer provider, which is what you want for a tenant migration.",[203,278,280],{"id":279},"_3-give-the-tenant-folders-to-the-tenancy-package","3. Give the tenant folders to the tenancy package",[199,282,283,284,291,292,295,296,299,300,303],{},"With ",[285,286,290],"a",{"href":287,"rel":288},"https:\u002F\u002Ftenancyforlaravel.com",[289],"nofollow","stancl\u002Ftenancy",", override its config from a technical layer, for example ",[215,293,294],{},"technical\u002Ftenancy\u002Fconfig\u002Ftenancy.php",", loaded with ",[215,297,298],{},"overrideConfigFrom()"," in that layer's provider ",[215,301,302],{},"register()",":",[208,305,309],{"className":306,"code":307,"filename":308,"language":260,"meta":217,"style":217},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","public function register(): void\n{\n    $this->overrideConfigFrom(__DIR__ . '\u002F..\u002F..\u002Fconfig\u002Ftenancy.php', 'tenancy');\n}\n","technical\u002Ftenancy\u002Fsrc\u002FProviders\u002FTenancyServiceProvider.php",[215,310,311,332,338,375],{"__ignoreMap":217},[253,312,313,317,320,324,328],{"class":255,"line":256},[253,314,316],{"class":315},"spNyl","public",[253,318,319],{"class":315}," function",[253,321,323],{"class":322},"s2Zo4"," register",[253,325,327],{"class":326},"sMK4o","():",[253,329,331],{"class":330},"sbssI"," void\n",[253,333,335],{"class":255,"line":334},2,[253,336,337],{"class":326},"{\n",[253,339,341,344,347,350,353,356,359,362,365,367,370,372],{"class":255,"line":340},3,[253,342,343],{"class":326},"    $this->",[253,345,346],{"class":322},"overrideConfigFrom",[253,348,349],{"class":326},"(__DIR__",[253,351,352],{"class":326}," .",[253,354,355],{"class":326}," '",[253,357,358],{"class":263},"\u002F..\u002F..\u002Fconfig\u002Ftenancy.php",[253,360,361],{"class":326},"'",[253,363,364],{"class":326},",",[253,366,355],{"class":326},[253,368,369],{"class":263},"tenancy",[253,371,361],{"class":326},[253,373,374],{"class":326},");\n",[253,376,378],{"class":255,"line":377},4,[253,379,380],{"class":326},"}\n",[208,382,384],{"className":306,"code":383,"filename":294,"language":260,"meta":217,"style":217},"return [\n    'migration_parameters' => [\n        '--force' => true,\n        '--path' => array_merge(\n            glob(base_path('functional\u002F*\u002Fdatabase\u002Fmigrations\u002Ftenant'), GLOB_ONLYDIR) ?: [],\n            glob(base_path('technical\u002F*\u002Fdatabase\u002Fmigrations\u002Ftenant'), GLOB_ONLYDIR) ?: [],\n        ),\n        '--realpath' => true,\n    ],\n];\n",[215,385,386,395,410,425,442,479,507,513,527,533],{"__ignoreMap":217},[253,387,388,392],{"class":255,"line":256},[253,389,391],{"class":390},"s7zQu","return",[253,393,394],{"class":326}," [\n",[253,396,397,400,403,405,408],{"class":255,"line":334},[253,398,399],{"class":326},"    '",[253,401,402],{"class":263},"migration_parameters",[253,404,361],{"class":326},[253,406,407],{"class":326}," =>",[253,409,394],{"class":326},[253,411,412,415,418,420,422],{"class":255,"line":340},[253,413,414],{"class":326},"        '",[253,416,417],{"class":263},"--force",[253,419,361],{"class":326},[253,421,407],{"class":326},[253,423,424],{"class":326}," true,\n",[253,426,427,429,432,434,436,439],{"class":255,"line":377},[253,428,414],{"class":326},[253,430,431],{"class":263},"--path",[253,433,361],{"class":326},[253,435,407],{"class":326},[253,437,438],{"class":322}," array_merge",[253,440,441],{"class":326},"(\n",[253,443,445,448,451,454,456,458,461,463,466,470,473,476],{"class":255,"line":444},5,[253,446,447],{"class":322},"            glob",[253,449,450],{"class":326},"(",[253,452,453],{"class":322},"base_path",[253,455,450],{"class":326},[253,457,361],{"class":326},[253,459,460],{"class":263},"functional\u002F*\u002Fdatabase\u002Fmigrations\u002Ftenant",[253,462,361],{"class":326},[253,464,465],{"class":326},"),",[253,467,469],{"class":468},"sTEyZ"," GLOB_ONLYDIR",[253,471,472],{"class":326},")",[253,474,475],{"class":326}," ?:",[253,477,478],{"class":326}," [],\n",[253,480,482,484,486,488,490,492,495,497,499,501,503,505],{"class":255,"line":481},6,[253,483,447],{"class":322},[253,485,450],{"class":326},[253,487,453],{"class":322},[253,489,450],{"class":326},[253,491,361],{"class":326},[253,493,494],{"class":263},"technical\u002F*\u002Fdatabase\u002Fmigrations\u002Ftenant",[253,496,361],{"class":326},[253,498,465],{"class":326},[253,500,469],{"class":468},[253,502,472],{"class":326},[253,504,475],{"class":326},[253,506,478],{"class":326},[253,508,510],{"class":255,"line":509},7,[253,511,512],{"class":326},"        ),\n",[253,514,516,518,521,523,525],{"class":255,"line":515},8,[253,517,414],{"class":326},[253,519,520],{"class":263},"--realpath",[253,522,361],{"class":326},[253,524,407],{"class":326},[253,526,424],{"class":326},[253,528,530],{"class":255,"line":529},9,[253,531,532],{"class":326},"    ],\n",[253,534,536],{"class":255,"line":535},10,[253,537,538],{"class":326},"];\n",[199,540,541,544,545,548],{},[215,542,543],{},"tenants:migrate"," then runs every layer's tenant migrations, and only those. Adjust the globs if your ",[215,546,547],{},"osdd.layers.paths"," folders differ.",[203,550,552],{"id":551},"_4-tenant-seeders","4. Tenant seeders",[199,554,555,556,559,560,236,562,565],{},"Keep tenant seeders out of ",[215,557,558],{},"loadSeeders()",", so ",[215,561,130],{},[215,563,564],{},"db:seed"," never run them. Create one seeder in the technical layer that calls them:",[208,567,570],{"className":306,"code":568,"filename":569,"language":260,"meta":217,"style":217},"\u003C?php\n\nnamespace Technical\\Tenancy\\Database\\Seeders;\n\nuse Illuminate\\Database\\Seeder;\n\nfinal class TenantDatabaseSeeder extends Seeder\n{\n    public function run(): void\n    {\n        $this->call([\n            \\Functional\\Billing\\Database\\Seeders\\TenantPlansSeeder::class,\n        ]);\n    }\n}\n","technical\u002Ftenancy\u002Fdatabase\u002Fseeders\u002FTenantDatabaseSeeder.php",[215,571,572,580,586,612,616,635,639,656,660,674,679,691,727,733,739],{"__ignoreMap":217},[253,573,574,577],{"class":255,"line":256},[253,575,576],{"class":326},"\u003C?",[253,578,579],{"class":468},"php\n",[253,581,582],{"class":255,"line":334},[253,583,585],{"emptyLinePlaceholder":584},true,"\n",[253,587,588,591,594,597,600,602,605,607,609],{"class":255,"line":340},[253,589,590],{"class":330},"namespace",[253,592,593],{"class":259}," Technical",[253,595,596],{"class":326},"\\",[253,598,599],{"class":259},"Tenancy",[253,601,596],{"class":326},[253,603,604],{"class":259},"Database",[253,606,596],{"class":326},[253,608,72],{"class":259},[253,610,611],{"class":326},";\n",[253,613,614],{"class":255,"line":377},[253,615,585],{"emptyLinePlaceholder":584},[253,617,618,621,624,626,628,630,633],{"class":255,"line":444},[253,619,620],{"class":330},"use",[253,622,623],{"class":468}," Illuminate",[253,625,596],{"class":326},[253,627,604],{"class":468},[253,629,596],{"class":326},[253,631,632],{"class":468},"Seeder",[253,634,611],{"class":326},[253,636,637],{"class":255,"line":481},[253,638,585],{"emptyLinePlaceholder":584},[253,640,641,644,647,650,653],{"class":255,"line":509},[253,642,643],{"class":315},"final",[253,645,646],{"class":315}," class",[253,648,649],{"class":259}," TenantDatabaseSeeder",[253,651,652],{"class":315}," extends",[253,654,655],{"class":259}," Seeder\n",[253,657,658],{"class":255,"line":515},[253,659,337],{"class":326},[253,661,662,665,667,670,672],{"class":255,"line":529},[253,663,664],{"class":315},"    public",[253,666,319],{"class":315},[253,668,669],{"class":322}," run",[253,671,327],{"class":326},[253,673,331],{"class":330},[253,675,676],{"class":255,"line":535},[253,677,678],{"class":326},"    {\n",[253,680,682,685,688],{"class":255,"line":681},11,[253,683,684],{"class":326},"        $this->",[253,686,687],{"class":322},"call",[253,689,690],{"class":326},"([\n",[253,692,694,697,700,702,705,707,709,711,713,715,718,721,724],{"class":255,"line":693},12,[253,695,696],{"class":326},"            \\",[253,698,699],{"class":468},"Functional",[253,701,596],{"class":326},[253,703,704],{"class":468},"Billing",[253,706,596],{"class":326},[253,708,604],{"class":468},[253,710,596],{"class":326},[253,712,72],{"class":468},[253,714,596],{"class":326},[253,716,717],{"class":259},"TenantPlansSeeder",[253,719,720],{"class":326},"::",[253,722,723],{"class":330},"class",[253,725,726],{"class":326},",\n",[253,728,730],{"class":255,"line":729},13,[253,731,732],{"class":326},"        ]);\n",[253,734,736],{"class":255,"line":735},14,[253,737,738],{"class":326},"    }\n",[253,740,742],{"class":255,"line":741},15,[253,743,380],{"class":326},[199,745,746],{},"Then point the tenancy package at it:",[208,748,750],{"className":306,"code":749,"filename":294,"language":260,"meta":217,"style":217},"'seeder_parameters' => [\n    '--class' => \\Technical\\Tenancy\\Database\\Seeders\\TenantDatabaseSeeder::class,\n],\n",[215,751,752,765,805],{"__ignoreMap":217},[253,753,754,756,759,761,763],{"class":255,"line":256},[253,755,361],{"class":326},[253,757,758],{"class":263},"seeder_parameters",[253,760,361],{"class":326},[253,762,407],{"class":326},[253,764,394],{"class":326},[253,766,767,769,772,774,776,779,782,784,786,788,790,792,794,796,799,801,803],{"class":255,"line":334},[253,768,399],{"class":326},[253,770,771],{"class":263},"--class",[253,773,361],{"class":326},[253,775,407],{"class":326},[253,777,778],{"class":326}," \\",[253,780,781],{"class":468},"Technical",[253,783,596],{"class":326},[253,785,599],{"class":468},[253,787,596],{"class":326},[253,789,604],{"class":468},[253,791,596],{"class":326},[253,793,72],{"class":468},[253,795,596],{"class":326},[253,797,798],{"class":259},"TenantDatabaseSeeder",[253,800,720],{"class":326},[253,802,723],{"class":330},[253,804,726],{"class":326},[253,806,807],{"class":255,"line":340},[253,808,809],{"class":326},"],\n",[199,811,812,815,816,819,820,822,823,826,827,831],{},[215,813,814],{},"technical\u002Ftenancy"," uses classes of ",[215,817,818],{},"functional\u002Fbilling"," here: require ",[215,821,818],{}," in ",[215,824,825],{},"technical\u002Ftenancy\u002Fcomposer.json",", or ",[285,828,829],{"href":123},[215,830,122],{}," reports it.",[203,833,835],{"id":834},"with-spatielaravel-multitenancy","With spatie\u002Flaravel-multitenancy",[199,837,838,839,844,845,848],{},"The same layout works with ",[285,840,843],{"href":841,"rel":842},"https:\u002F\u002Fspatie.be\u002Fdocs\u002Flaravel-multitenancy",[289],"spatie\u002Flaravel-multitenancy",": pass the same folders to ",[215,846,847],{},"migrate --path=... --realpath"," when you migrate a tenant.",[850,851,852],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":217,"searchDepth":256,"depth":334,"links":854},[855,856,857,858,859],{"id":205,"depth":334,"text":206},{"id":243,"depth":334,"text":244},{"id":279,"depth":334,"text":280},{"id":551,"depth":334,"text":552},{"id":834,"depth":334,"text":835},"Keep the tenant migrations and seeders of each layer apart, and hand them to stancl\u002Ftenancy or spatie\u002Flaravel-multitenancy.","md",null,{},{"title":96,"description":860},{"loc":97},"T8ySKFPAGFndiouwNVixg-NmWMu9ujRNllElmstfiNs",[868,870],{"title":92,"path":93,"stem":94,"description":869,"children":-1},"Retire a domain safely, from the layers that still use it to the tables it leaves behind.",{"title":106,"path":107,"stem":108,"description":871,"children":-1},"Every Artisan command Laravel OSDD registers.",1794437211617]