1. Go to this page and download the library: Download wakebit/cycle-bridge library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
use Cycle\Database\Config\DatabaseConfig;
use Cycle\Migrations\Config\MigrationConfig;
use Psr\Container\ContainerInterface;
use Spiral\Tokenizer\Config\TokenizerConfig;
use Wakebit\CycleBridge\Schema\Config\SchemaConfig;
use function DI\create;
/**
* @psalm-suppress UndefinedClass
* @psalm-suppress MixedArgument
*/
return [
'database' => static function (ContainerInterface $container): DatabaseConfig {
return new DatabaseConfig([
'default' => 'default',
'databases' => [
'default' => [
'connection' => $container->get('config')['db.connection'],
],
],
'connections' => [
'sqlite' => new \Cycle\Database\Config\SQLiteDriverConfig(
connection: new \Cycle\Database\Config\SQLite\MemoryConnectionConfig(),
queryCache: true,
),
'mysql' => new \Cycle\Database\Config\MySQLDriverConfig(
connection: new \Cycle\Database\Config\MySQL\TcpConnectionConfig(
database: $container->get('config')['db.database'],
host: $container->get('config')['db.host'],
port: 3306,
user: $container->get('config')['db.username'],
password: $container->get('config')['db.password'],
),
queryCache: true,
),
'postgres' => new \Cycle\Database\Config\PostgresDriverConfig(
connection: new \Cycle\Database\Config\Postgres\TcpConnectionConfig(
database: $container->get('config')['db.database'],
host: $container->get('config')['db.host'],
port: 5432,
user: $container->get('config')['db.username'],
password: $container->get('config')['db.password'],
),
schema: 'public',
queryCache: true,
),
'sqlServer' => new \Cycle\Database\Config\SQLServerDriverConfig(
connection: new \Cycle\Database\Config\SQLServer\TcpConnectionConfig(
database: $container->get('config')['db.database'],
host: $container->get('config')['db.host'],
port: 1433,
user: $container->get('config')['db.username'],
password: $container->get('config')['db.password'],
),
queryCache: true,
),
],
]);
},
'orm' => [
'schema' => static function (): SchemaConfig {
return new SchemaConfig();
},
'tokenizer' => static function (): TokenizerConfig {
return new TokenizerConfig([
'directories' => [
__DIR__ . '/../src/Entity',
],
'exclude' => [
],
]);
},
],
'migrations' => static function (ContainerInterface $container): MigrationConfig {
return new MigrationConfig([
'directory' => __DIR__ . '/../resources/migrations',
'table' => 'migrations',
'safe' => filter_var($container->get('config')['debug'], FILTER_VALIDATE_BOOLEAN),
]);
},
];
declare(strict_types=1);
use Cycle\Database\Config\DatabaseConfig;
use Cycle\Database\DatabaseInterface;
use Cycle\Database\DatabaseManager;
use Cycle\Database\DatabaseProviderInterface;
use Cycle\Migrations\Config\MigrationConfig;
use Cycle\Migrations\FileRepository;
use Cycle\Migrations\RepositoryInterface;
use Cycle\ORM\EntityManager;
use Cycle\ORM\EntityManagerInterface;
use Cycle\ORM\Factory;
use Cycle\ORM\FactoryInterface;
use Cycle\ORM\ORM;
use Cycle\ORM\ORMInterface;
use Cycle\ORM\SchemaInterface;
use Psr\Container\ContainerInterface;
use Spiral\Tokenizer\ClassesInterface;
use Spiral\Tokenizer\ClassLocator;
use Spiral\Tokenizer\Config\TokenizerConfig;
use Spiral\Tokenizer\Tokenizer;
use Wakebit\CycleBridge\Contracts\Schema\CacheManagerInterface;
use Wakebit\CycleBridge\Contracts\Schema\CompilerInterface;
use Wakebit\CycleBridge\Contracts\Schema\GeneratorQueueInterface;
use Wakebit\CycleBridge\Schema\CacheManager;
use Wakebit\CycleBridge\Schema\Compiler;
use Wakebit\CycleBridge\Schema\Config\SchemaConfig;
use Wakebit\CycleBridge\Schema\GeneratorQueue;
use Wakebit\CycleBridge\Schema\SchemaFactory;
use function DI\autowire;
use function DI\factory;
use function DI\get;
return [
'config' => r): ClassesInterface {
return $container->get(Tokenizer::class)->classLocator();
},
FactoryInterface::class => autowire(Factory::class),
CacheManagerInterface::class => static function (): CacheManagerInterface {
// Here you need to pass PSR-16 compatible cache pool. See example with cache file below.
// Packages: league/flysystem, cache/filesystem-adapter
$filesystemAdapter = new \League\Flysystem\Adapter\Local(__DIR__ . '/../var/cache');
$filesystem = new \League\Flysystem\Filesystem($filesystemAdapter);
$pool = new \Cache\Adapter\Filesystem\FilesystemCachePool($filesystem);
return new CacheManager($pool);
},
GeneratorQueueInterface::class => autowire(GeneratorQueue::class),
CompilerInterface::class => autowire(Compiler::class),
SchemaInterface::class => factory([SchemaFactory::class, 'create']),
ORMInterface::class => static function (ContainerInterface $container): ORMInterface {
return new ORM($container->get(FactoryInterface::class), $container->get(SchemaInterface::class));
},
EntityManagerInterface::class => autowire(EntityManager::class),
RepositoryInterface::class => autowire(FileRepository::class),
];
declare(strict_types=1);
namespace App\Entity;
use Cycle\Annotated\Annotation\Entity;
use Cycle\Annotated\Annotation\Column;
#[Entity]
class User
{
#[Column(type: 'primary')]
private int $id;
#[Column(type: 'string')]
private string $name;
public function getId(): int
{
return $this->id;
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): void
{
$this->name = $name;
}
}
declare(strict_types=1);
namespace App;
use Cycle\Database\DatabaseProviderInterface;
use Cycle\ORM\EntityManagerInterface;
use Cycle\ORM\ORMInterface;
final class SomeClass
{
public function __construct(
private DatabaseProviderInterface $dbal,
private EntityManagerInterface $em,
private ORMInterface $orm,
) {
}
public function __invoke()
{
// DBAL
$tables = $this->dbal->database()->getTables();
$tableNames = array_map(fn (\Cycle\Database\TableInterface $table): string => $table->getName(), $tables);
dump($tableNames);
// Create, modify, delete entities using Transaction
$user = new \App\Entity\User();
$user->setName("Hello World");
$this->em->persist($user);
$this->em->run();
dump($user);
// ORM
$repository = $this->orm->getRepository(\App\Entity\User::class);
$users = $repository->findAll();
dump($users);
$user = $repository->findByPK(1);
dump($user);
}
}
use Wakebit\CycleBridge\Schema\Config\SchemaConfig;
return [
// ...
'orm' => [
'schema' => static function (): SchemaConfig {
return new SchemaConfig([
'map' =>
use Wakebit\CycleBridge\Schema\Config\SchemaConfig;
return [
// ...
'orm' => [
'schema' => static function (): SchemaConfig {
return new SchemaConfig([
'generators' => [
'index' => [],
'render' => [
\Cycle\Schema\Generator\ResetTables::class, // re-declared table schemas (remove columns)
\Cycle\Schema\Generator\GenerateRelations::class, // generate entity relations
\Cycle\Schema\Generator\ValidateEntities::class, // make sure all entity schemas are correct
\Cycle\Schema\Generator\RenderTables::class, // declare table schemas
\Cycle\Schema\Generator\RenderRelations::class, // declare relation keys and indexes
],
'postprocess' => [
\Cycle\Schema\Generator\GenerateTypecast::class, // typecast non string columns
],
]
]);
},
]
// ...
]
FactoryInterface::class => static function (ContainerInterface $container): FactoryInterface {
return new \Cycle\ORM\Factory(
dbal: $container->get(DatabaseProviderInterface::class),
defaultCollectionFactory: new \Cycle\ORM\Collection\DoctrineCollectionFactory(),
);
},
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.