1
0
Fork 0
mirror of https://github.com/archtechx/tenancy.git synced 2026-02-04 20:34:03 +00:00
This commit is contained in:
Samuel Štancl 2019-08-16 12:35:08 +02:00
parent fefe12dab4
commit 0176579e80
3 changed files with 38 additions and 13 deletions

View file

@ -32,9 +32,9 @@ class DatabaseStorageDriver implements StorageDriver
public function getTenantById(string $uuid, array $fields = []): array public function getTenantById(string $uuid, array $fields = []): array
{ {
if ($fields) { if ($fields) {
return Tenant::find($uuid)->only($fields); return Tenant::decodeData(Tenant::find($uuid)->only($fields));
} else { } else {
return Tenant::find($uuid)->toArray(); return Tenant::find($uuid)->decoded();
} }
} }

View file

@ -37,15 +37,35 @@ class Tenant extends Model
{ {
$tenants = $uuids ? static::findMany($uuids) : static::all(); $tenants = $uuids ? static::findMany($uuids) : static::all();
return $tenants->map(function ($tenant) { return $tenants->map([__CLASS__, 'decodeData'])->toBase();
$tenant = (array) $tenant->attributes; }
foreach (json_decode($tenant[static::dataColumn()], true) as $key => $value) {
$tenant[$key] = $value;
}
unset($tenant[static::dataColumn()]); // todo what if 'data' key is stored in tenant storage?
return $tenant; public function decoded()
})->toBase(); {
return static::decodeData($this);
}
/**
* Return a tenant array with data decoded into separate keys.
*
* @param Tenant|array $tenant
* @return array
*/
public static function decodeData($tenant)
{
$tenant = $tenant instanceof self ? (array) $tenant->attributes : $tenant;
$decoded = json_decode($tenant[$dataColumn = static::dataColumn()], true);
foreach ($decoded as $key => $value) {
$tenant[$key] = $value;
}
// If $tenant[$dataColumn] has been overriden by a value, don't delete the key.
if (! array_key_exists($dataColumn, $decoded)) {
unset($tenant[$dataColumn]);
}
return $tenant;
} }
public function getFromData(string $key) public function getFromData(string $key)

View file

@ -118,7 +118,12 @@ final class TenantManager
{ {
$fields = (array) $fields; $fields = (array) $fields;
return $this->jsonDecodeArrayValues($this->storage->getTenantById($uuid, $fields)); $tenant = $this->storage->getTenantById($uuid, $fields);
if ($this->useJson()) {
$tenant = $this->jsonDecodeArrayValues($tenant);
}
return $tenant;
} }
/** /**
@ -269,7 +274,7 @@ final class TenantManager
$uuid = $uuid ?: $this->tenant['uuid']; $uuid = $uuid ?: $this->tenant['uuid'];
if (\is_array($key)) { if (\is_array($key)) {
return $this->jsonDecodeArrayValues($this->storage->getMany($uuid, $key)); return $this->jsonDecodeArrayValues($this->storage->getMany($uuid, $key)); // todo is this correct?
} }
return json_decode($this->storage->get($uuid, $key), true); return json_decode($this->storage->get($uuid, $key), true);
@ -321,7 +326,7 @@ final class TenantManager
$key[$k] = json_encode($v); $key[$k] = json_encode($v);
} }
return $this->jsonDecodeArrayValues($this->storage->putMany($uuid, $key)); return $this->jsonDecodeArrayValues($this->storage->putMany($uuid, $key)); // todo is this correct?
} }
/** /**