Maghead (Php)

From Handwiki
Maghead
Meghead-logo-rev5-512.png
Stable release
4.0.0 / May 17, 2017 (2017-05-17)
Written inPHP
Operating systemCross-platform
TypeObject-relational mapping
LicenseMIT
Websitegithub.com/maghead

"Maghead" is a database framework, written in PHP, which includes libraries for object-relational mapping, database layer abstracting, sharding ... etc.

It provides a bunch of generators that can generate static code from the model schemas. Queries are generated at compile time, therefore the runtime cost is reduced.

The performance almost close to hand written query code with plain PDO statement.

History

The Maghead project was started in August 2012, formerly known as LazyRecord, with the availability of versions PHP version 5. With version 5.3, PHP was finally able to provide a level of support for object-oriented programming that both made projects like Maghead possible and also created a demand for these hitherto-missing components of large-scale, object-oriented architectures.

Feature

  • Support multiple database connections.
  • Support read/write separation.
  • Schema in pure PHP.
  • Support database Instance management.
  • Support application layer sharding: It includes a shard balancer, consistent hashing library, chunk/shard management tools.
  • Maghead generates the repo classes that follows repository pattern
  • Automatic lightweight migration
  • Support upgrade/downgrade migration by manual written migration scripts.

Usage

Entities in Maghead are lightweight PHP Objects that contain persistable properties. A persistable property is an instance variable of the entity that is saved into and retrieved from the database by Maghead's data mapping capabilities - an implementation of the data mapper pattern:

use App\Model\User;

$newUser = User::create([ .... ]);

$newUserInNode2Database = User::repo('node2')->create([ .... ]);

$user = User::masterRepo()->find(12);
echo $user->first_name;
echo $user->getFirstName(); // with inflator (hydrate)

$ret = $user->update([
  'first_name' => 'Alice',
]);
echo "The user with id {$ret->key} has been saved.";

Schema

Maghead provides the declarative schema API to help user define the model schemas, and which was inspired by Jifty DBI

<?php

namespace AuthorBooks\Model;

use Maghead\Schema\DeclareSchema;

class AuthorSchema extends DeclareSchema
{
    public function schema()
    {
        $this->column('name')
            ->varchar(128)
            ->findable()
            ;

        $this->column('email')
            ->required()
            ->findable()
            ->varchar(128);

        $this->column('account_brief')
            ->label('Account Brief')
            ->virtual()
            ->inflator(function ($value, $record) {
                return $record->name . '(' . $record->email . ')';
            });

        $this->column('identity')
            ->unique()
            ->required()
            ->varchar(128)
            ->validator('StringLength', ['min' => 3, 'max' => 64])
            ->findable()
            ;

        $this->column('confirmed')
            ->boolean()
            ->default(false);

        $this->mixin('Maghead\\Schema\\Mixin\\MetadataMixinSchema');

        $this->many('addresses', 'AuthorBooks\Model\AddressSchema', 'author_id', 'id');

        $this->many('unused_addresses', 'AuthorBooks\Model\AddressSchema', 'author_id', 'id')
            ->where()
                ->equal('unused', true);

        $this->many('author_books', 'AuthorBooks\Model\AuthorBookSchema', 'author_id', 'id');

        $this->manyToMany('books', 'author_books', 'book');
    }
}

Performance

Maghead performs "Find by primary key" best in the benchmarks.

The overall performance benchmark is better than Doctrine (PHP) and Propel (PHP).

Community

  • Gitter https://gitter.im/maghead/maghead

See also

  • Propel (PHP)
  • Doctrine (PHP)
  • List of object-relational mapping software
  • Symfony, a web application framework which uses Doctrine by default
  • CodeIgniter, framework with integration officially supported by Doctrine team
  • DataEase, whose query language is also called DQL
  • Skipper, visualization tool for Doctrine




Retrieved from "https://handwiki.org/wiki/index.php?title=Software:Maghead_(PHP)&oldid=360261"

Categories: [PHP libraries] [Object-relational mapping]


Download as ZWI file | Last modified: 08/02/2023 07:32:10 | 17 views
☰ Source: https://handwiki.org/wiki/Software:Maghead_(PHP) | License: CC BY-SA 3.0

ZWI signed:
  Encycloreader by the Knowledge Standards Foundation (KSF) ✓[what is this?]