{"id":30527427,"url":"https://github.com/cpellens/marquee","last_synced_at":"2026-05-08T15:09:00.897Z","repository":{"id":57022410,"uuid":"321274702","full_name":"cpellens/marquee","owner":"cpellens","description":"Free PHP micro abstraction for universal database interaction, supporting a wide variety of data sources","archived":false,"fork":false,"pushed_at":"2021-04-16T16:05:14.000Z","size":46,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-24T22:38:11.867Z","etag":null,"topics":["csv","mysql","redis"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cpellens.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-12-14T08:01:32.000Z","updated_at":"2021-04-16T16:05:18.000Z","dependencies_parsed_at":"2022-08-23T12:20:47.310Z","dependency_job_id":null,"html_url":"https://github.com/cpellens/marquee","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/cpellens/marquee","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpellens%2Fmarquee","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpellens%2Fmarquee/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpellens%2Fmarquee/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpellens%2Fmarquee/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cpellens","download_url":"https://codeload.github.com/cpellens/marquee/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cpellens%2Fmarquee/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272280770,"owners_count":24906219,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-27T02:00:09.397Z","response_time":76,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csv","mysql","redis"],"created_at":"2025-08-27T02:23:45.165Z","updated_at":"2026-05-08T15:08:55.870Z","avatar_url":"https://github.com/cpellens.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Marquee Database Layer\n\n## Overview\n\nMarquee is a free multi-database abstraction layer and ORM. Its purpose is to allow for universal code patterns while making\nuse of intelligent data sources. Whether you choose to store your data in Redis, MySQL, or even a CSV - 99% of your PHP code\nremains the same.\n\n## Database Support\n\n* Redis: Testing\n* MySQL: Alpha / Testing\n* SQLite: Planned\n* MSSQL: Planned\n* CSV: Planned\n* JSON: Planned\n* PostgreSQL: Planned\n* Azure Cosmos DB: Planned\n\n## About the Author\n\nMy name is Charles Pellens. I am a self-taught software engineer from Michigan. I am passionate about\nsimplifying the web development process through automation and innovation. I have a nack for creating clean, semantic APIs.\nI believe that code verbosity should not be dependent solely on comments. This project allows for expressive code by making use of\nsimple, understandable, and predictable method and class names while maintaining flexible functionality. I hope you find that\nmy work enables you to quickly get up and going with your next project.\n\nhttps://charlespellens.me/ | contact@charlespellens.com\n\n## Disclaimer: Not Production Ready\n\nWhile I am very proud of the progress on this project, please do not use it for any mission critical work at this point.\nThis is a work in progress and I invite you to play around with it or make it your own.\n\n## Quick Start / Example\n\n```php\n\u003c?php\n\ninclude 'vendor/autoload.php';\n\n/**\n * Library Use Statements\n */\nuse Marquee\\Core\\Connection\\MySQLConnection;\nuse Marquee\\Data\\Entity;\nuse Marquee\\Exception\\Exception;\nuse Marquee\\Schema\\Property;\n\n/**\n * PHP Core Use Statements\n */\nuse \\Generator;\n\n/**\n * Define a sample entity with two string properties:\n * - username\n * - password\n */\nclass User extends Entity\n{\n    public function getUsername(): string\n    {\n        return $this-\u003eusername;\n    }\n\n    public static function Properties(): Generator\n    {\n        yield Property::string('username')-\u003eunique();\n        yield Property::string('password');\n    }\n}\n\n$db = new MySQLConnection(MySQLConnection::CreateDsn(DB_HOST, DB_PORT, DB_PASSWORD, DB_USERNAME));\n$db-\u003eselectDb(DB_NAME);\n\nif ($db-\u003etryConnect($e)) {\n    try {\n        /**\n         * Build the user table if it doesn't already exist in the schema\n         */\n        $table = User::BuildTable($db);\n        if (!$table-\u003eexists()) {\n            $table-\u003ecreate();\n            echo 'Created user table', '\u003cbr\u003e';\n        }\n\n        /**\n         * Query all users\n         */\n        $userCount = 0;\n        $users     = $db-\u003equery(User::class)-\u003elimit(10)-\u003eget();\n\n        echo '\u003cul\u003e';\n        while ($user = $users-\u003enext()) {\n            echo '\u003cli\u003e', $user, '\u003c/li\u003e';\n            $userCount++;\n        }\n        echo '\u003c/ul\u003e';\n\n        /**\n         * If we have less than 10 users, insert a new one.\n         */\n        if ($userCount \u003c 10) {\n            $insert = $db-\u003equery(User::class)-\u003ecreate([\n                'username' =\u003e 'Test ' . uniqid(),\n                'password' =\u003e password_hash('test password', PASSWORD_ARGON2I)\n            ]);\n\n            if ($user = $insert-\u003enext()) {\n                echo 'Created test user';\n            }\n        } else {\n            /**\n             * Start over if we have 10 users\n             */\n            $db-\u003equery(User::class)-\u003etruncate()-\u003enext();\n            echo 'Deleted all users';\n        }\n    } catch (Exception $e) {\n        echo 'Error: ', $e-\u003egetMessage();\n    } finally {\n        $db-\u003edisconnect();\n    }\n} else {\n    exit($e-\u003egetMessage());\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcpellens%2Fmarquee","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcpellens%2Fmarquee","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcpellens%2Fmarquee/lists"}