Skip to content

Database changes #5

@ildar-ceo

Description

@ildar-ceo

Каждый плагин может определить схему базы данных и изменения к ней

class Schema extends DatabaseSchema
{
	/**
	 * Database changes
	 */
	public static Vector changes() =>
	[
		/* Add table users */
		new DatabaseChange
		{
			"name": "core:patch1",
			"requires": [],
			"up": void (DatabaseBuilder builder)
			{
				builder.create("users")
					.description("Users table")
					.add(new BigIntType{"name": "id"})
					.add(new StringType{"name": "name"})
					.add(new StringType{"name": "email"})
					.add(new AutoIncrement{"name": "id"})
					.add(new Primary{"keys": ["id"]})
					.add(new Unique{"keys": ["name"]})
				;
			},
			"down": void (DatabaseBuilder builder)
			{
				builder.drop("users");
			},
		},
		
		/* Add table users_auth */
		new DatabaseChange
		{
			"name": "core:patch2",
			"requires": [
				"core:patch1"
			],
			"up": void (DatabaseBuilder builder)
			{
				builder.create("users_auth")
					.description("Users auth table")
					.add(new BigIntType{"name": "user_id"})
					.add(new StringType{"name": "password"})
					.add(new Primary{"keys": ["user_id"]})
					.add(new ForeignKey{
						"name": "users_auth",
						"table_name": "users",
						"primary_key": ["id"],
						"foreign_key": ["user_id"],
					})
				;
			},
			"down": void (DatabaseBuilder builder)
			{
				builder.drop("users_auth");
			},
		}
	];
}

В настройках приложения нужно создать файл с патчами базы данных. Каждый патч содержит список названий и порядок изменений, которые нужно применить в базе данных. Например:

class Patch extends DatabasePatch
{
	/**
	 * Returns patches names
	 */
	Collection patches() =>
	[
		{
			"version": "v1",
			"patch":
			[
				"core:patch1",
				"core:patch2"
			]
		},
	];
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions