{"id":19210650,"url":"https://github.com/mhndev/pongo","last_synced_at":"2026-04-20T19:32:01.672Z","repository":{"id":62527796,"uuid":"153886885","full_name":"mhndev/Pongo","owner":"mhndev","description":"This package helps Learn how to work with mongodb in php without any thirdparty package","archived":false,"fork":false,"pushed_at":"2019-01-17T11:27:01.000Z","size":12,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-04T16:43:32.147Z","etag":null,"topics":["mongo","mongodb","php-mongodb"],"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/mhndev.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":"2018-10-20T08:49:58.000Z","updated_at":"2023-03-05T04:52:00.000Z","dependencies_parsed_at":"2022-11-02T14:02:53.128Z","dependency_job_id":null,"html_url":"https://github.com/mhndev/Pongo","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhndev%2FPongo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhndev%2FPongo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhndev%2FPongo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mhndev%2FPongo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mhndev","download_url":"https://codeload.github.com/mhndev/Pongo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240283037,"owners_count":19776810,"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","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":["mongo","mongodb","php-mongodb"],"created_at":"2024-11-09T13:36:44.169Z","updated_at":"2025-11-13T19:02:28.943Z","avatar_url":"https://github.com/mhndev.png","language":"PHP","readme":"### PHP MongoDB \nthis packages contains sample source code for how to work with mongodb in php,\nwithout help of any library, just use mongodb/mongodb official package\nusing repository pattern.\n\n\nyou should create your entities and repositories like following source codes.\n\n\n#### Post Entity class\n```php\n\u003c?php\nnamespace mhndev\\Pongo\\Entity;\n\nuse mhndev\\Pongo\\Contract\\iMongoEntity;\n\n/**\n * Class EntityPost\n * @package mhndev\\Pongo\\Entity\n */\nclass EntityPost implements iMongoEntity\n{\n\n    /**\n     * @var string\n     */\n    protected $id;\n\n    /**\n     * @var string\n     */\n    protected $title;\n\n    /**\n     * @var string\n     */\n    protected $body;\n\n    /**\n     * @var array\n     */\n    protected $lastThreeComment;\n\n\n    /**\n     * @var \\DateTime\n     */\n    protected $created_at;\n\n\n    /**\n     * @param string $id\n     * @return EntityPost\n     */\n    public function setId(string $id): EntityPost\n    {\n        $this-\u003eid = $id;\n\n        return $this;\n    }\n\n    /**\n     * @return string\n     */\n    public function getId(): string\n    {\n        return $this-\u003eid;\n    }\n\n    /**\n     * @param string $title\n     * @return EntityPost\n     */\n    public function setTitle(string $title): EntityPost\n    {\n        $this-\u003etitle = $title;\n\n        return $this;\n    }\n\n\n\n    /**\n     * @return string\n     */\n    public function getTitle(): string\n    {\n        return $this-\u003etitle;\n    }\n\n    /**\n     * @param string $body\n     * @return EntityPost\n     */\n    public function setBody(string $body): EntityPost\n    {\n        $this-\u003ebody = $body;\n\n        return $this;\n    }\n\n    /**\n     * @return string\n     */\n    public function getBody(): string\n    {\n        return $this-\u003ebody;\n    }\n\n    /**\n     * @param array $lastThreeComment\n     * @return EntityPost\n     */\n    public function setLastThreeComment(array $lastThreeComment): EntityPost\n    {\n        $this-\u003elastThreeComment = $lastThreeComment;\n\n        return $this;\n    }\n\n    /**\n     * @return array\n     */\n    public function getLastThreeComment(): array\n    {\n        return $this-\u003elastThreeComment;\n    }\n\n    /**\n     * @param \\DateTime $created_at\n     * @return EntityPost\n     */\n    public function setCreatedAt(\\DateTime $created_at): EntityPost\n    {\n        $this-\u003ecreated_at = $created_at;\n\n        return $this;\n    }\n\n    /**\n     * @return \\DateTime\n     */\n    public function getCreatedAt(): \\DateTime\n    {\n        return $this-\u003ecreated_at;\n    }\n\n\n    /**\n     * @return array\n     */\n    function toMongo()\n    {\n        return [\n            'title' =\u003e $this-\u003etitle,\n            'body'  =\u003e $this-\u003ebody,\n            'created_at' =\u003e $this-\u003ecreated_at\n        ];\n\n    }\n\n}\n\n\n```\n\nconsider all entities that are going to be persisted in mongo should implement iMongoEntity interface\nand this method contains nothing more than hydrate object to an array which can be persisted to mongodb.\n\n\nand here is .\n\n#### Post Repository\n\n```php\n\n\u003c?php\nnamespace mhndev\\Pongo\\Repository;\n\nuse mhndev\\Pongo\\Entity\\EntityPost;\nuse mhndev\\Pongo\\Exception\\exEntityNotFound;\nuse mhndev\\Pongo\\MongoHelper;\nuse MongoDB\\BSON\\ObjectId;\nuse MongoDB\\Collection;\nuse MongoDB\\Database;\n\n/**\n * Class RepositoryPost\n * @package mhndev\\Pongo\\Repository\n */\nclass RepositoryPost\n{\n\n    /**\n     * @var Collection\n     */\n    protected $gateway;\n\n    /**\n     * RepositoryPost constructor.\n     * @param Database $db\n     * @param string $collectionName\n     */\n    function __construct(Database $db, string $collectionName)\n    {\n        $this-\u003egateway = $db-\u003eselectCollection($collectionName);\n    }\n\n\n    /**\n     * @param EntityPost $post\n     * @return EntityPost\n     */\n    function persist(EntityPost $post)\n    {\n        $result = $this-\u003egateway-\u003einsertOne(MongoHelper::postEntityToMongoPersistable($post));\n\n        return $post-\u003esetId($result-\u003egetInsertedId());\n    }\n\n\n    /**\n     * @param string $id\n     * @return EntityPost\n     * @throws exEntityNotFound\n     */\n    function findById(string $id)\n    {\n        $record = $this-\u003egateway-\u003efindOne(['_id' =\u003e new ObjectId($id)]);\n\n        if(is_null($record)) {\n            throw new exEntityNotFound;\n        }\n\n        return MongoHelper::postMongoToEntityPost(iterator_to_array($record));\n\n    }\n\n    /**\n     * @return array\n     */\n    function list10NewPosts()\n    {\n        $result = $this-\u003egateway-\u003efind([], ['$sort' =\u003e ['created_at' =\u003e -1 ] ])-\u003etoArray();\n\n        return MongoHelper::arrayPostMongoToEntity($result);\n    }\n\n\n}\n\n\n```\n\nand here you can checkout the sample usage :\n\n\n```php\n\n\u003c?php\nini_set('display_errors', 1);\nini_set('display_startup_errors', 1);\nerror_reporting(E_ALL);\n\n\ninclude_once \"vendor/autoload.php\";\n\n\n$settings =  [\n    'driver' =\u003e [\n        // Master Connection Client\n        'master' =\u003e [\n            'host' =\u003e 'mongodb://localhost:27017',\n            'options_uri' =\u003e [\n            ],\n            'options' =\u003e [\n            ],\n        ],\n    ],\n];\n\n$mongoDriver = new \\mhndev\\Pongo\\MongoDriverManager();\n$mongoDriver-\u003eaddClient(new MongoDB\\Client($settings['driver']['master']['host'] ), 'master' );\n$mongoClient = $mongoDriver-\u003ebyClient('master');\n$db = $mongoClient-\u003eselectDatabase('db_name');\n\n\n$postRepo = new \\mhndev\\Pongo\\Repository\\RepositoryPost($db, 'posts');\n\n$post = (new \\mhndev\\Pongo\\Entity\\EntityPost())\n    -\u003esetTitle('My New Post Title')\n    -\u003esetBody('My New Post Body')\n    -\u003esetCreatedAt(new DateTime());\n\n$persistedPost = $postRepo-\u003epersist($post);\nvar_dump($persistedPost);\ndie();\n\n\n$postEntity = $postRepo-\u003efindById('5bcae585cf2a2e1d122a2ab3');\nvar_dump($postEntity);\ndie();\n\n\n$last10Posts = $postRepo-\u003elist10NewPosts();\n\nvar_dump($last10Posts);\ndie();\n\n\n```","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmhndev%2Fpongo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmhndev%2Fpongo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmhndev%2Fpongo/lists"}