Documentation
¶
Index ¶
- type Orm
- func (r *Orm) Config() database.Config
- func (r *Orm) Connection(name string) contractsorm.Orm
- func (r *Orm) DB() (*sql.DB, error)
- func (r *Orm) DatabaseName() string
- func (r *Orm) Factory() contractsorm.Factory
- func (r *Orm) Fresh()
- func (r *Orm) Name() string
- func (r *Orm) Observe(model any, observer contractsorm.Observer)
- func (r *Orm) Query() contractsorm.Query
- func (r *Orm) Related(parent any, relation string) contractsorm.RelationQuery
- func (r *Orm) Relation(parent any, name string) contractsorm.RelationWriterdeprecated
- func (r *Orm) SetQuery(query contractsorm.Query)
- func (r *Orm) Transaction(txFunc func(tx contractsorm.Query) error) (err error)
- func (r *Orm) WithContext(ctx context.Context) contractsorm.Orm
- type QueriesCache
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Orm ¶
type Orm struct {
// contains filtered or unexported fields
}
func NewOrm ¶
func NewOrm( ctx context.Context, config config.Config, connection string, dbConfig database.Config, query contractsorm.Query, queries *QueriesCache, log log.Log, modelToObserver []contractsorm.ModelToObserver, fresh func(key ...any), telemetryResolver contractstelemetry.Resolver, ) *Orm
NewOrm creates a new Orm instance for the given connection.
queries is the shared, concurrency-safe registry of built connections and must be non-nil (construct it via NewQueriesCache). It should contain an entry for the connection (extended lazily by Connection()).
func (*Orm) Connection ¶
func (r *Orm) Connection(name string) contractsorm.Orm
func (*Orm) DatabaseName ¶
func (*Orm) Factory ¶
func (r *Orm) Factory() contractsorm.Factory
func (*Orm) Fresh ¶
func (r *Orm) Fresh()
TODO: The fresh logic needs to be optimized, it's a bit unclear now. https://github.com/goravel/goravel/issues/848
func (*Orm) Query ¶
func (r *Orm) Query() contractsorm.Query
Query gets a new query builder instance, as the Orm contract states and as Laravel's Connection::query() does: a fresh builder every call, so the Model / Where / Raw a caller writes are that caller's alone. The stored handle is the connection's, not a query anyone builds on.
func (*Orm) Related ¶
func (r *Orm) Related(parent any, relation string) contractsorm.RelationQuery
Related returns the relation builder object pre-scoped to the related rows for parent.relation. parent must be a non-nil pointer to a struct. See contractsorm.Orm.Related for the per-kind shape and contractsorm.RelationQuery for the object surface.
func (*Orm) Relation
deprecated
func (r *Orm) Relation(parent any, name string) contractsorm.RelationWriter
Relation returns a RelationWriter bound to (parent, name) for FK-safe write operations. See contractsorm.Orm.Relation for usage.
Deprecated: use Related(parent, name) instead, Relation will be removed in a future major version. The relation builder object Related returns — contractsorm.RelationQuery and its per-kind write interfaces — carries the same write operations.
func (*Orm) SetQuery ¶
func (r *Orm) SetQuery(query contractsorm.Query)
func (*Orm) Transaction ¶
func (r *Orm) Transaction(txFunc func(tx contractsorm.Query) error) (err error)
func (*Orm) WithContext ¶
func (r *Orm) WithContext(ctx context.Context) contractsorm.Orm
type QueriesCache ¶
type QueriesCache struct {
// contains filtered or unexported fields
}
QueriesCache is the shared, concurrency-safe registry of connections built from the same database config. Every Orm instance created from the same connection pool shares one QueriesCache, so concurrent Connection(name) calls from different instances (e.g. lazily building the same non-default connection from multiple goroutines) are serialized by the internal mutex.
func NewQueriesCache ¶
func NewQueriesCache(queries map[string]contractsorm.Query, dbConfigs map[string]database.Config) *QueriesCache
NewQueriesCache creates a QueriesCache from per-connection queries and configs. queries and dbConfigs must be keyed identically by connection name.
Directories
¶
| Path | Synopsis |
|---|---|
|
Package reflectx implements extensions to the standard reflect lib suitable for implementing marshaling and unmarshaling packages.
|
Package reflectx implements extensions to the standard reflect lib suitable for implementing marshaling and unmarshaling packages. |