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 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) { $original_domains = Domains::where('tenant_id', $tenant->id)->get()->map(function ($model) {
return $model->domain; return $model->domain;
})->toArray(); })->toArray();
$deleted_domains = array_diff($original_domains, $tenant->domains); $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) { foreach ($tenant->domains as $domain) {
Domains::firstOrCreate([ Domains::firstOrCreate([
'tenant_id' => $tenant->id, 'tenant_id' => $tenant->id,
'domain' => $domain, 'domain' => $domain,
]); ]);
} }
});
} }
public function deleteTenant(Tenant $tenant): void public function deleteTenant(Tenant $tenant): void
{ {
Tenants::find($tenant->id)->delete(); DB::transacton(function () use ($tenant) {
Domains::where('tenant_id', $tenant->id)->delete(); 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(); 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;
$this->persisted = $persisted;
return $this;
}
return $this; return $this;
} }