leocavalcante / hyperf-doctrine
此包已弃用且不再维护。未建议替代包。
该项目为 Doctrine ORM 和 Hyperf 框架提供集成。
v0.1.0
2022-02-27 02:03 UTC
Requires
- php: >=8.0
- ext-pdo: *
- doctrine/orm: ^2.11
- hyperf/db: ^2.2
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.6
- mockery/mockery: ^1.5
- phpstan/phpstan: ^1.4
- phpunit/phpunit: >=9.5
- spatie/phpunit-watcher: ^1.23
- swoole/ide-helper: ^4.8
README
项目将继续在:https://github.com/opencodeco/hyperf-doctrine
谢谢!
Hyperf 🤝 Doctrine
该项目为 Doctrine ORM 和 Hyperf 框架提供集成。
安装
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