shedeza/sybase-orm
最新稳定版本:3.0.0
Composer 安装命令:
composer require shedeza/sybase-orm
包简介
Pure PHP ORM for Sybase ASE — framework-agnostic
README 文档
README
ORM puro en PHP para Sybase ASE, independiente de framework. Soporta mapeo de entidades con atributos PHP 8.1, consultas OQL, QueryBuilder, relaciones, herencia, caché de dos niveles, migraciones y más.
Requisitos del sistema
- PHP 8.1 o superior
- Extensión
ext-pdo_dblib - Servidor Sybase ASE
Instalación
composer require shedeza/sybase-orm
Configuración rápida
Configuración por array
use SybaseORM\ORM\OrmFactory; $em = OrmFactory::create([ 'connection' => [ 'host' => '192.168.1.100', 'port' => 5000, 'dbname' => 'mi_base', 'username' => 'sa', 'password' => 'secret', 'charset' => 'UTF-8', ], 'entity_directories' => [__DIR__ . '/src/Entity'], ]);
Configuración por URL DSN
use SybaseORM\ORM\OrmFactory; $em = OrmFactory::createFromUrl( 'sybase://sa:secret@192.168.1.100:5000/mi_base?charset=UTF-8', entityDirectories: [__DIR__ . '/src/Entity'], );
Los caracteres especiales en la contraseña deben codificarse con URL encoding (por ejemplo, p@ss → p%40ss).
Uso básico
Persistir una entidad
$usuario = new Usuario(); $usuario->nombre = 'Juan'; $usuario->email = 'juan@example.com'; $em->persist($usuario); $em->flush();
Buscar por ID
$usuario = $em->find(Usuario::class, 1);
Consultar con OQL
$usuarios = $em->query( 'SELECT u FROM Usuario u WHERE u.activo = :activo', ['activo' => true] );
Eliminar una entidad
$em->remove($usuario); $em->flush();
Mapeo de entidades
use SybaseORM\Attribute\Entity; use SybaseORM\Attribute\Id; use SybaseORM\Attribute\Column; use SybaseORM\Attribute\GeneratedValue; #[Entity(table: 'usuarios')] class Usuario { #[Id] #[GeneratedValue] #[Column(type: 'integer')] public ?int $id = null; #[Column(type: 'string', length: 100)] public string $nombre = ''; #[Column(type: 'string', length: 255, nullable: true)] public ?string $email = null; #[Column(type: 'datetime')] public ?\DateTimeInterface $creadoEn = null; }
Atributos PHP disponibles
| Atributo | Destino | Descripción |
|---|---|---|
#[Entity] |
Clase | Marca una clase como entidad mapeada. Parámetros: table, schema, repositoryClass, connection |
#[Id] |
Propiedad | Marca la propiedad como clave primaria. Parámetro: strategy |
#[Column] |
Propiedad | Mapea una propiedad a una columna. Parámetros: name, type, nullable, length, precision, scale |
#[GeneratedValue] |
Propiedad | Indica que el valor es generado por la base de datos. Parámetro: strategy (por defecto IDENTITY) |
#[ManyToOne] |
Propiedad | Relación muchos-a-uno. Parámetros: targetEntity, inversedBy, cascade, fetch |
#[OneToMany] |
Propiedad | Relación uno-a-muchos. Parámetros: targetEntity, mappedBy, cascade, fetch, orphanRemoval |
#[OneToOne] |
Propiedad | Relación uno-a-uno. Parámetros: targetEntity, mappedBy, inversedBy, cascade, fetch, orphanRemoval |
#[ManyToMany] |
Propiedad | Relación muchos-a-muchos. Parámetros: targetEntity, mappedBy, inversedBy, joinTable, cascade, fetch |
#[JoinColumn] |
Propiedad | Especifica la columna de unión. Parámetros: name, referencedColumnName |
#[JoinColumns] |
Propiedad | Múltiples columnas de unión para claves compuestas |
#[Embeddable] |
Clase | Marca una clase como value object embebible |
#[Embedded] |
Propiedad | Mapea una propiedad a un value object. Parámetros: class, columnPrefix |
#[HasLifecycleHooks] |
Clase | Activa hooks de ciclo de vida en la entidad |
#[PrePersist] |
Método | Hook ejecutado antes de insertar |
#[PostPersist] |
Método | Hook ejecutado después de insertar |
#[PreUpdate] |
Método | Hook ejecutado antes de actualizar |
#[PostUpdate] |
Método | Hook ejecutado después de actualizar |
#[PreRemove] |
Método | Hook ejecutado antes de eliminar |
#[PostRemove] |
Método | Hook ejecutado después de eliminar |
#[SoftDelete] |
Clase | Activa eliminación lógica. Parámetro: column (por defecto deleted_at) |
#[InheritanceType] |
Clase | Estrategia de herencia: TPH, TPT, TPC |
#[DiscriminatorColumn] |
Clase | Columna discriminadora para herencia. Parámetros: name, type |
#[DiscriminatorMap] |
Clase | Mapa de valores discriminadores a clases. Parámetro: map |
Relaciones
El ORM soporta relaciones #[ManyToOne], #[OneToMany], #[OneToOne] y #[ManyToMany] con lazy loading automático mediante proxies y eager loading vía QueryBuilder::with().
Para documentación detallada de relaciones, consulte el manual de relaciones.
Conexiones múltiples
Use EntityManagerRegistry para gestionar conexiones a múltiples bases de datos:
use SybaseORM\ORM\OrmFactory; use SybaseORM\ORM\EntityManagerRegistry; $emDefault = OrmFactory::create(['connection' => $configDefault, 'entity_directories' => $dirs]); $emReportes = OrmFactory::create(['connection' => $configReportes, 'entity_directories' => $dirs]); $registry = new EntityManagerRegistry([ 'default' => $emDefault, 'reportes' => $emReportes, ], defaultConnection: 'default'); // Obtener un manager específico $em = $registry->getManager('reportes'); // Obtener el manager por defecto $em = $registry->getDefaultManager(); // Obtener el manager que gestiona una entidad (por su atributo connection) $em = $registry->getManagerForEntity(Reporte::class);
Opciones de configuración
| Opción | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
host |
string |
'localhost' |
Host del servidor Sybase ASE |
port |
int |
5000 |
Puerto de conexión |
dbname |
string |
(requerido) | Nombre de la base de datos |
username |
string |
'' |
Usuario de conexión |
password |
string |
'' |
Contraseña de conexión |
charset |
string |
'UTF-8' |
Charset de la conexión |
persistent |
bool |
false |
Usar conexiones persistentes |
charset_conversion |
bool |
false |
Activar conversión automática UTF-8 ↔ ISO-8859-1 |
read_only |
bool |
false |
Modo solo lectura (previene escrituras) |
entity_directories |
string[] |
[] |
Directorios donde buscar entidades |
entity_classes |
string[] |
[] |
Clases de entidad explícitas |
proxy_directory |
string |
sys_get_temp_dir() . '/sybase-orm-proxies' |
Directorio para proxies generados |
metadata_cache_dir |
string|null |
null |
Directorio de caché de metadatos |
Documentación completa
- Documentación completa — Punto de entrada central a toda la documentación
- Manual de usuario — Guía detallada de cada módulo del ORM
- Manual de operación — Despliegue, optimización y troubleshooting
- Manual técnico — Arquitectura interna, patrones y extensibilidad
Licencia
Este proyecto está licenciado bajo la Licencia MIT.
统计信息
- 总下载量: 112
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 1
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2026-06-03