butschster / cycle-orm
Cycle ORM 对 Laravel 框架的集成
Requires
- php: ^7.4|^8.0
- cycle/annotated: ^2.0
- cycle/migrations: ^1.0
- cycle/orm: ^1.2
- cycle/proxy-factory: ^1.2.1
- cycle/schema-builder: ^1.1
- illuminate/config: ^7.0|^8.0
- illuminate/console: ^7.0|^8.0
- illuminate/contracts: ^7.0|^8.0
- illuminate/database: ^7.0|^8.0
- illuminate/pagination: ^7.0|^8.0
- illuminate/support: ^7.0|^8.0
Requires (Dev)
- fzaninotto/faker: ^1.9.1
- mockery/mockery: ^1.0
- phpunit/phpunit: ^7.0|^8.0|^9.0
This package is auto-updated.
Last update: 2024-09-08 02:01:10 UTC
README
Cycle 是一个 PHP 数据映射 ORM 和数据建模引擎,旨在在经典和守护进程化的 PHP 应用程序(如 RoadRunner)中安全工作。该 ORM 提供了灵活的配置选项来建模数据集,一个强大的查询构建器,并支持动态映射模式。该引擎可以与纯 PHP 对象一起工作,支持注解声明,并通过扩展进行代理。
完整信息 - https://cycle-orm.dev/docs
要求
- Laravel 7.x
- PHP 7.4 及以上
安装和配置
在命令行运行
composer require butschster/cycle-orm
可选地,您可以注册 EntityManager、Transaction 和/或 ORM 门面
'DatabaseManager' => Butschster\Cycle\Facades\DatabaseManager::class, 'Transaction' => Butschster\Cycle\Facades\Transaction::class, 'ORM' => Butschster\Cycle\Facades\ORM::class, 'EntityManager' => Butschster\Cycle\Facades\EntityManager::class,
环境变量
DB_CONNECTION=postgres
DB_HOST=127.0.0.1
DB_PORT= # Default port 5432
DB_DATABASE=homestead
DB_USERNAME=root
DB_PASSWORD=
DB_MIGRATIONS_TABLE=migrations # Migrations table name
DB_SCHEMA_SYNC=false # Sync DB schema without migrations
DB_SCHEMA_CACHE=true # Cache DB schema
DB_SCHEMA_CACHE_DRIVER=file # DB schema cache driver
配置
发布配置文件。
php artisan vendor:publish --provider="Butschster\Cycle\Providers\LaravelServiceProvider" --tag=config
配置数据库
可用的连接和数据库名单可以在 config/cycle.php
的 database
部分列出。更多信息请参阅 https://cycle-orm.dev/docs/basic-connect#configure-databases
获取数据库管理器 ($dbal)
DatabaseManager
作为单例容器注册
$dbal = $this->app->get(\Spiral\Database\DatabaseManager::class); // Or $dbal = $this->app->get(\Spiral\Database\DatabaseProviderInterface::class);
就是这样!
控制台命令
php artisan cycle:migrate
从目录中运行 cycle orm 迁移。
php artisan cycle:refresh
刷新数据库模式。
用法
默认情况下,类定位器在 app 文件夹中查找实体。您可以在 config/cycle.php
配置文件中指定位置。
... 'directories' => [ app_path(), ], ...
实体管理器
EntityManager 是访问 ORM 功能的中心入口点。它可以用来查找、持久化和删除实体。
使用 EntityManager
您可以使用门面、容器或依赖注入来访问 EntityManager 方法
EntityManager::persist($entity); // Or app(\Butschster\Cycle\Contracts\EntityManager::class)->persist($entity); // Or use Butschster\Cycle\Contracts\EntityManager; class ExampleController extends Controller { protected $em; public function __construct(EntityManager $em) { $this->em = $em; } }
查找实体
实体是具有身份的对象。它们的身份在您的领域中有概念意义。在 CMS 应用程序中,每篇文章都有一个唯一的 id。您可以通过该 id 唯一标识每篇文章。
$article = EntityManager::findByPK('App\Article', 1); $article->setTitle('Different title'); $article2 = EntityManager::findByPK('App\Article', 1); if ($article === $article2) { echo "Yes we are the same!"; }
持久化
通过通过 EntityManager 的 persist 方法传递实体,该实体变为 MANAGED,这意味着从现在起其持久性将由 EntityManager 管理。
$article = new Article; $article->setTitle('Let\'s learn about persisting'); EntityManager::persist($article);
删除
通过传递实体到 delete($entity) 方法,可以从持久存储中删除实体。
EntityManager::delete($article);
示例
User
<?php namespace App; use Illuminate\Contracts\Auth\Authenticatable; /** * @ORM\Entity( * table="users", * repository="App\UserRepository", * ) */ class User implements Authenticatable { /** @ORM\Column(type="uuid", primary=true) */ protected string $id; /** @ORM\Column(type="string") */ protected string $password; /** @ORM\Column(type="string") */ protected string $rememberToken = ''; public function getId(): string { return $this->id; } /** * @return string */ public function getAuthIdentifierName(): string { return 'id'; } /** * @return string */ public function getAuthIdentifier(): string { return $this->getId(); } /** * @return string */ public function getAuthPassword(): string { return $this->password; } /** * @param string $password */ public function setAuthPassword(string $password): void { $this->password = $password; } /** * @return string */ public function getRememberToken(): string { return $this->rememberToken; } /** * @param string $value */ public function setRememberToken($value): void { $this->rememberToken = $value; } /** * @return string */ public function getRememberTokenName(): string { return 'rememberToken'; } }
存储库
namespace App; use Butschster\Cycle\Repository; class UserRepository extends Repository { /** @inheritDoc */ public function findByUsername(string $username): ?User { return $this->findOne(['username' => $username]); } }
创建用户
use Cycle\ORM\ORMInterface; use Butschster\Cycle\Facades\ORM; use Butschster\Cycle\Facades\EntityManager; $user = new User(); $repository = app(ORMInterface::class)->getRepository($user); // or $repository = ORM::getRepository($user); // or $repository = ORM::getRepository(User::class); $repository->persist($user); // or EntityManager::persist($user);
更新用户
use Butschster\Cycle\Facades\ORM; use Butschster\Cycle\Facades\EntityManager; $repository = ORM::getRepository(User::class); $user = $repository->findByPK('5c9e177b0a975a6eeccf5960'); $user->setAuthPassword('secret'); $repository->persist($user); // or EntityManager::persist($user);
删除用户
use Butschster\Cycle\Facades\ORM; use Butschster\Cycle\Facades\EntityManager; $repository = ORM::getRepository(User::class); $user = $repository->findByPK('5c9e177b0a975a6eeccf5960'); $repository->delete($user); // or EntityManager::delete($user);