28 lines
1003 B
PHP
28 lines
1003 B
PHP
<?php
|
|
|
|
use Illuminate\Database\Migrations\Migration;
|
|
use Illuminate\Support\Facades\DB;
|
|
|
|
return new class extends Migration
|
|
{
|
|
public function up(): void
|
|
{
|
|
DB::unprepared(<<<'SQL'
|
|
CREATE OR REPLACE FUNCTION sgf_immutable_membership() RETURNS trigger LANGUAGE plpgsql AS $$
|
|
BEGIN
|
|
IF NEW.user_id IS DISTINCT FROM OLD.user_id OR NEW.tenant_id IS DISTINCT FROM OLD.tenant_id OR NEW.company_id IS DISTINCT FROM OLD.company_id THEN
|
|
RAISE EXCEPTION 'SGF_IMMUTABLE_OWNERSHIP';
|
|
END IF;
|
|
RETURN NEW;
|
|
END; $$;
|
|
CREATE TRIGGER membership_immutable BEFORE UPDATE ON company_memberships FOR EACH ROW EXECUTE FUNCTION sgf_immutable_membership();
|
|
SQL);
|
|
}
|
|
|
|
public function down(): void
|
|
{
|
|
DB::statement('DROP TRIGGER IF EXISTS membership_immutable ON company_memberships');
|
|
DB::statement('DROP FUNCTION IF EXISTS sgf_immutable_membership()');
|
|
}
|
|
};
|