mirror of
https://github.com/stancl/tenancy-docs.git
synced 2025-12-12 18:24:03 +00:00
108 lines
3.6 KiB
Markdown
108 lines
3.6 KiB
Markdown
---
|
|
title: Upgrading from 2.x
|
|
extends: _layouts.documentation
|
|
section: content
|
|
---
|
|
|
|
# Upgrading from 2.x
|
|
|
|
Note that most of the package's code is different now, which means that you will have to update all of the places where you interact with the package's classes.
|
|
|
|
That said, automatic tenancy will still work the same way.
|
|
|
|
- Move all `_tenancy_` prefixed keys in tenant storage to `tenancy_` prefixed keys
|
|
|
|
Run this **with 2.x code** (but put application down first, this will break your app and require that you update to 3.x immediately after). Of course make a backup of the DB first.
|
|
|
|
(Note: You may want to make this part of a migration)
|
|
|
|
```php
|
|
use Stancl\Tenancy\Tenant;
|
|
use Illuminate\Support\Str;
|
|
|
|
tenancy()
|
|
->all()
|
|
->each(function (Tenant $tenant) {
|
|
$keys = array_keys($tenant->data);
|
|
$keys = array_filter($keys, function ($key) {
|
|
return Str::startsWith($key, '_tenancy_');
|
|
});
|
|
|
|
foreach ($keys as $key) {
|
|
$value = $tenant->data[$key];
|
|
unset($tenant->data[$key]);
|
|
$tenant->data[str_replace('_tenancy_', 'tenancy_', $key)] = $value;
|
|
}
|
|
|
|
$tenant->save();
|
|
});
|
|
|
|
```
|
|
|
|
- Create migration file with `php artisan make:migration upgrade_tenancy_package`
|
|
|
|
```php
|
|
<?php
|
|
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\Facades\Schema;
|
|
use Illuminate\Database\Schema\Blueprint;
|
|
use Illuminate\Database\Migrations\Migration;
|
|
|
|
class UpgradeTenancyPackage extends Migration
|
|
{
|
|
/**
|
|
* Run the migrations.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function up()
|
|
{
|
|
Schema::table('domains', function (Blueprint $table) {
|
|
$table->dropPrimary();
|
|
});
|
|
|
|
Schema::table('domains', function (Blueprint $table) {
|
|
$table->increments('id')->first();
|
|
$table->unique('domain');
|
|
$table->timestamps();
|
|
});
|
|
|
|
Schema::table('tenants', function (Blueprint $table) {
|
|
$table->json('data')->nullable()->change();
|
|
$table->timestamps();
|
|
});
|
|
|
|
DB::table('domains')->update([
|
|
'created_at' => now(),
|
|
'updated_at' => now()
|
|
]);
|
|
}
|
|
|
|
/**
|
|
* Reverse the migrations.
|
|
*
|
|
* @return void
|
|
*/
|
|
public function down()
|
|
{
|
|
Schema::table('domains', function (Blueprint $table) {
|
|
$table->dropColumn('id');
|
|
$table->dropUnique(['domain']);
|
|
$table->dropTimestamps();
|
|
$table->primary('domain');
|
|
});
|
|
|
|
Schema::table('tenants', function (Blueprint $table) {
|
|
$table->json('data')->nullable(false)->change();
|
|
$table->dropTimestamps();
|
|
});
|
|
}
|
|
}
|
|
|
|
```
|
|
|
|
- Replace your Http Kernel with a stock version (copy it from laravel/laravel: [https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php](https://github.com/laravel/laravel/blob/master/app/Http/Kernel.php)) and add back in any changes you made. The package now doesn't necessitate any Kernel changes, so remove all of the 2.x ones.
|
|
- Delete config, publish it & the new files using `php artisan tenancy:install`. Register the new provider (see instructions on the [Installation]({{ $page->link('installation') }}) page)
|
|
- Create Tenant model, as instructed on the [Tenants]({{ $page->link('tenants') }}) page
|
|
- Update routes to use the correct middleware, see the [Routes]({{ $page->link('routes') }}) page
|