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

DB transactions

This commit is contained in:
Samuel Štancl 2019-09-21 13:27:26 +02:00
parent a5a9f47eaa
commit 46609c5b0d
2 changed files with 27 additions and 20 deletions

View file

@ -90,27 +90,31 @@ class DatabaseStorageDriver implements StorageDriver
public function updateTenant(Tenant $tenant): void
{
Tenants::find($tenant->id)->putMany($tenant->data);
DB::transaction(function () use ($tenant) {
Tenants::find($tenant->id)->putMany($tenant->data);
$original_domains = Domains::where('tenant_id', $tenant->id)->get()->map(function ($model) {
return $model->domain;
})->toArray();
$deleted_domains = array_diff($original_domains, $tenant->domains);
$original_domains = Domains::where('tenant_id', $tenant->id)->get()->map(function ($model) {
return $model->domain;
})->toArray();
$deleted_domains = array_diff($original_domains, $tenant->domains);
Domains::whereIn('domain', $deleted_domains)->delete();
Domains::whereIn('domain', $deleted_domains)->delete();
foreach ($tenant->domains as $domain) {
Domains::firstOrCreate([
'tenant_id' => $tenant->id,
'domain' => $domain,
]);
}
foreach ($tenant->domains as $domain) {
Domains::firstOrCreate([
'tenant_id' => $tenant->id,
'domain' => $domain,
]);
}
});
}
public function deleteTenant(Tenant $tenant): void
{
Tenants::find($tenant->id)->delete();
Domains::where('tenant_id', $tenant->id)->delete();
DB::transacton(function () use ($tenant) {
Tenants::find($tenant->id)->delete();
Domains::where('tenant_id', $tenant->id)->delete();
});
}
/**

View file

@ -111,13 +111,16 @@ class Tenant implements ArrayAccess
return static::new()->withDomains((array) $domains)->withData($data)->save();
}
protected function persisted($persisted = null)
/**
* DO NOT CALL THIS METHOD FROM USERLAND UNLESS YOU KNOW WHAT YOU ARE DOING.
* Set $persisted.
*
* @param bool $persisted
* @return self
*/
public function persisted(bool $persisted): self
{
if (gettype($persisted) === 'boolean') {
$this->persisted = $persisted;
return $this;
}
$this->persisted = $persisted;
return $this;
}