1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2025-12-12 17:24:03 +00:00

Respect custom columns during tenant creation (#191)

This commit is contained in:
Samuel Štancl 2019-10-20 00:27:52 +02:00 committed by GitHub
parent 479df83027
commit f489aba819
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 51 additions and 5 deletions

View file

@ -103,7 +103,9 @@ class DatabaseStorageDriver implements StorageDriver
public function createTenant(Tenant $tenant): void public function createTenant(Tenant $tenant): void
{ {
$this->centralDatabase->transaction(function () use ($tenant) { $this->centralDatabase->transaction(function () use ($tenant) {
Tenants::create(['id' => $tenant->id, 'data' => json_encode($tenant->data)])->toArray(); Tenants::create(array_merge(Tenants::encodeData($tenant->data), [
'id' => $tenant->id,
]))->toArray();
$domainData = []; $domainData = [];
foreach ($tenant->domains as $domain) { foreach ($tenant->domains as $domain) {

View file

@ -33,6 +33,24 @@ class TenantModel extends Model
return config('tenancy.storage_drivers.db.custom_columns', []); return config('tenancy.storage_drivers.db.custom_columns', []);
} }
public static function encodeData(array $data)
{
$result = [];
$jsonData = [];
foreach ($data as $key => $value) {
if (in_array($key, static::customColumns(), true)) {
$result[$key] = $value;
} else {
$jsonData[$key] = $value;
}
}
$result['data'] = $jsonData ? json_encode($jsonData) : '{}';
return $result;
}
public static function getAllTenants(array $ids) public static function getAllTenants(array $ids)
{ {
$tenants = $ids ? static::findMany($ids) : static::all(); $tenants = $ids ? static::findMany($ids) : static::all();

View file

@ -137,7 +137,7 @@ class TenantStorageTest extends TestCase
/** @test */ /** @test */
public function custom_columns_work_with_db_storage_driver() public function custom_columns_work_with_db_storage_driver()
{ {
if (config('tenancy.storage_driver') != 'Stancl\Tenancy\StorageDrivers\DatabaseStorageDriver') { if (config('tenancy.storage_driver') != 'db') {
$this->markTestSkipped(); $this->markTestSkipped();
} }
@ -153,12 +153,38 @@ class TenantStorageTest extends TestCase
'foo', 'foo',
]]); ]]);
tenant()->create(['foo.localhost']); tenancy()->create(['foo.localhost']);
tenancy()->init('foo.localhost'); tenancy()->init('foo.localhost');
tenant()->put(['foo' => 'bar', 'abc' => 'xyz']); tenant()->put(['foo' => 'bar', 'abc' => 'xyz']);
$this->assertSame(['bar', 'xyz'], tenant()->get(['foo', 'abc'])); $this->assertSame(['foo' => 'bar', 'abc' => 'xyz'], tenant()->get(['foo', 'abc']));
$this->assertSame('bar', DB::connection('central')->table('tenants')->where('id', tenant('id'))->first()->foo); $this->assertSame('bar', \DB::connection('central')->table('tenants')->where('id', tenant('id'))->first()->foo);
}
/** @test */
public function custom_columns_can_be_used_on_tenant_create()
{
if (config('tenancy.storage_driver') != 'db') {
$this->markTestSkipped();
}
tenancy()->endTenancy();
$this->loadMigrationsFrom([
'--path' => __DIR__ . '/Etc',
'--database' => 'central',
]);
config(['database.default' => 'sqlite']); // fix issue caused by loadMigrationsFrom
config(['tenancy.storage_drivers.db.custom_columns' => [
'foo',
]]);
tenancy()->create(['foo.localhost'], ['foo' => 'bar', 'abc' => 'xyz']);
tenancy()->init('foo.localhost');
$this->assertSame(['foo' => 'bar', 'abc' => 'xyz'], tenant()->get(['foo', 'abc']));
$this->assertSame('bar', \DB::connection('central')->table('tenants')->where('id', tenant('id'))->first()->foo);
} }
} }