leocavalcante/hyperf-doctrine

此包已弃用且不再维护。未建议替代包。

该项目为 Doctrine ORM 和 Hyperf 框架提供集成。

v0.1.0 2022-02-27 02:03 UTC

This package is auto-updated.

Last update: 2023-10-06 18:09:41 UTC


README

项目将继续在:https://github.com/opencodeco/hyperf-doctrine

谢谢!

Hyperf 🤝 Doctrine

该项目为 Doctrine ORM 和 Hyperf 框架提供集成。

CI codecov PHPStan

安装

composer require leocavalcante/hyperf-doctrine

配置

你应该发布 hyperf/db,因为此包使用它作为底层驱动引擎

php bin/hyperf.php vendor:publish hyperf/db

⭐ 这意味着你可以免费将 Doctrine ORM 集成到 Hyperf 池和连接生命周期管理中 - 多么酷!

config/autoload/db.php 中配置数据库

return [
    'default' => [
        'driver' => 'pdo',
        'host' => env('DB_HOST', 'localhost'),
        'port' => env('DB_PORT', 3306),
        'database' => env('DB_DATABASE', 'hyperf'),
        'username' => env('DB_USERNAME', 'root'),
        'password' => env('DB_PASSWORD', ''),
        'charset' => env('DB_CHARSET', 'utf8mb4'),
        'collation' => env('DB_COLLATION', 'utf8mb4_unicode_ci'),
        'fetch_mode' => PDO::FETCH_ASSOC,
        'pool' => [
            'min_connections' => 1,
            'max_connections' => 10,
            'connect_timeout' => 10.0,
            'wait_timeout' => 3.0,
            'heartbeat' => -1,
            'max_idle_time' => (float) env('DB_MAX_IDLE_TIME', 60),
        ],
        'options' => [
            PDO::ATTR_CASE => PDO::CASE_NATURAL,
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
            PDO::ATTR_STRINGIFY_FETCHES => false,
            PDO::ATTR_EMULATE_PREPARES => false,
        ],
    ],
];

然后发布 Hyperf Doctrine 配置

php bin/hyperf.php vendor:publish leocavalcante/hyperf-doctrine

你可以在 config/autoload/doctrine.php 中编辑 Doctrine 的 Entity Manager 设置

return [
    'connection' => [
        'driverClass' => Hyperf\Doctrine\Driver::class,
        'pool' => 'default',
    ],
    'config' => Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration([__DIR__ . '/app']),
];

它还会在 config/ 中发布一个 cli-config.php,这样你就可以运行 vendor/bin/doctrine

vendor/bin/doctrine orm:schema-tool:create

用法

此时,你已经准备好使用 Doctrine ORM 与 Hyperf 一起了。

例如,创建一个实体,就像你通常做的那样

/**
 * @ORM\Entity()
 * @ORM\Table(name="users")
 */
final class User
{
    public function __construct(
        /**
         * @ORM\Id()
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        public int $id,
        /*
         * @ORM\Column(type="string")
         */
        public string $name,
        /**
         * @ORM\Column(type="string")
         */
        public string $email,
    ) {
    }
}

然后让依赖注入魔法为你注入一个 EntityManager

/**
 * @Controller(prefix="users")
 */
final class UsersController
{
    public function __construct(
        private EntityManagerInterface $em,
    ) {
    }

    /**
     * @GetMapping(path="")
     */
    public function index(RequestInterface $request, ResponseInterface $response)
    {
        return $this->em->getRepository(User::class)->findAll();
    }
}

就这样!

请随意贡献,提交问题和 PR。

MIT © 2022 Leo Cavalcante