Skip to content

Latest commit

 

History

History
186 lines (156 loc) · 4.52 KB

README.md

File metadata and controls

186 lines (156 loc) · 4.52 KB

Latest Stable Version Total Downloads Latest Unstable Version License PHP Version Require

zngly-graphql-db (preview)

WPGraphQL custom database manager

  • Create a model to reflect your desired table
  • During runtime the table is created/updated
  • CRUD access via Graphql or Direct accesss

Installation Via Composer

https://packagist.org/packages/zngly/zngly-graphql-db

composer require zngly/zngly-graphql-db

How To Use

use Zngly\Graphql\Db\ZnglyDb;
use Zngly\Graphql\Db\Model\Field;
use Zngly\Graphql\Db\Model\FieldType;
use Zngly\Graphql\Db\Model\Table;

class NotificationsModel extends Table
{
    public static function table_single_name(): string
    {
        return 'notification';
    }

    public static function table_plural_name(): string
    {
        return "notifications";
    }

    public static function graphql_single_name(): string
    {
        return "Notification";
    }

    public static function graphql_plural_name(): string
    {
        return "Notifications";
    }

    public static function graphql_from_type(): string
    {
        return "RootQuery";
    }

    public static function description(): string
    {
        return "Notifications!";
    }

    public static function fields(): array
    {
        return [
            Field::create()
                ->name("id")
                ->is_id()
                ->primary_key()
                ->description("notification id")
                ->type(FieldType::create()->BIGINT())
                ->not_null()
                ->auto_increment(),
            Field::create()
                ->name('title')
                ->description('notification title')
                ->type(FieldType::create()->TEXT())
                ->not_null()
                ->collate(),
            Field::create()
                ->name('message')
                ->description('notification message')
                ->type(FieldType::create()->TEXT())
                ->not_null()
                ->collate(),
            Field::create()
                ->name('from')
                ->description('form who the notification is from')
                ->type(FieldType::create()->TEXT())
                ->not_null()
                ->collate(),
            Field::create()
                ->name('to')
                ->description('form who the notification is to')
                ->type(FieldType::create()->TEXT())
                ->not_null()
                ->collate(),
        ];
    }
}

new ZnglyDb("0.0.1", [
    new NotificationsModel(),
]);

Graphql Queries & Mutations

query notifications {
	notifications(first: 1100) {
		nodes {
			id
			from
			message
			title
			to
		}
	}
}

mutation create {
	createNotification(input: { title: "new test", to: "admin", message: "review this pls", from: "user" }) {
		notification {
			id
			title
			to
			message
			from
		}
	}
}

mutation delete {
	deleteNotification(input: { id: "16" }) {
		deletedId
		notification {
			title
			id
		}
	}
}

mutation update {
	updateNotification(input: { id: 16, message: "Can you Review this Please." }) {
		notification {
			id
			from
			message
			title
			to
		}
	}
}

How To Access Your Models Manually

// below is an example of how to get a model from the database manager
// you can query, add, update and delete entries for the model
use Zngly\Graphql\Db\Database\DatabaseManager;

$db = DatabaseManager::get_instance();

$notification_db = $db->get("notification");

$nr = rand(1, 100);

// below is the structure of how the notification table actions should be
$notification_db->insert([
    'message' => 'test nr: ' . $nr,
    'from' => 'test' . $nr,
    'to' => 'test' . $nr,
    'title' => 'test' . $nr,
]);

$notification_db->update(1, [
    'message' => 'This is my new updated test',
]);

$notification_db->delete(1);

$notification_db->query([
    'fields' => ['id', 'from', 'to', "message"],
    // 'number' => '1',
    // 'search' => 'hello',
    // 'search_columns' => ['message'],
]);