fix: README
This commit is contained in:
parent
b179c585c7
commit
2a628e89af
95
README.md
95
README.md
@ -93,12 +93,6 @@ http://localhost:3000/cats?limit=5&page=2&sortBy=color:DESC&search=i&filter.age=
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
Array values for filter operators such as `$in` should be provided as comma-separated values:
|
|
||||||
|
|
||||||
```
|
|
||||||
http://localhost:3000/cats?filter.name=$in:George,Milo
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Code
|
#### Code
|
||||||
|
|
||||||
```ts
|
```ts
|
||||||
@ -265,51 +259,17 @@ const paginateConfig: PaginateConfig<CatEntity> {
|
|||||||
* Type: string
|
* Type: string
|
||||||
* Description: Allow user to choose between limit/offset and take/skip.
|
* Description: Allow user to choose between limit/offset and take/skip.
|
||||||
* Default: PaginationType.TAKE_AND_SKIP
|
* Default: PaginationType.TAKE_AND_SKIP
|
||||||
|
*
|
||||||
|
* However, using limit/offset can return unexpected results.
|
||||||
|
* For more information see:
|
||||||
|
* [#477](https://github.com/ppetzold/nestjs-paginate/issues/477)
|
||||||
|
* [#4742](https://github.com/typeorm/typeorm/issues/4742)
|
||||||
|
* [#5670](https://github.com/typeorm/typeorm/issues/5670)
|
||||||
*/
|
*/
|
||||||
paginationType: PaginationType.LIMIT_AND_OFFSET,
|
paginationType: PaginationType.LIMIT_AND_OFFSET,
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Eager loading
|
|
||||||
|
|
||||||
Eager loading should work with typeorm's eager property out the box. Like so
|
|
||||||
|
|
||||||
```typescript
|
|
||||||
import { Entity, OneToMany } from 'typeorm'
|
|
||||||
|
|
||||||
@Entity()
|
|
||||||
export class CatEntity {
|
|
||||||
@PrimaryGeneratedColumn()
|
|
||||||
id: number
|
|
||||||
|
|
||||||
@Column('text')
|
|
||||||
name: string
|
|
||||||
|
|
||||||
@Column('text')
|
|
||||||
color: string
|
|
||||||
|
|
||||||
@Column('int')
|
|
||||||
age: number
|
|
||||||
|
|
||||||
@OneToMany(() => CatToyEntity, (catToy) => catToy.cat, {
|
|
||||||
eager: true,
|
|
||||||
})
|
|
||||||
toys: CatToyEntity[]
|
|
||||||
}
|
|
||||||
|
|
||||||
// service
|
|
||||||
class CatService {
|
|
||||||
constructor(private readonly catsRepository: Repository<CatEntity>) {}
|
|
||||||
|
|
||||||
public findAll(query: PaginateQuery): Promise<Paginated<CatEntity>> {
|
|
||||||
return paginate(query, this.catsRepository, {
|
|
||||||
sortableColumns: ['id', 'name', 'color', 'age'],
|
|
||||||
loadEagerRelations: true, // set this property as true to enable the eager loading
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
## Usage with Query Builder
|
## Usage with Query Builder
|
||||||
|
|
||||||
You can paginate custom queries by passing on the query builder:
|
You can paginate custom queries by passing on the query builder:
|
||||||
@ -351,16 +311,26 @@ const config: PaginateConfig<CatEntity> = {
|
|||||||
const result = await paginate<CatEntity>(query, catRepo, config)
|
const result = await paginate<CatEntity>(query, catRepo, config)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage with nested Relations
|
**Note:** Embedded columns on relations have to be wrapped with brackets:
|
||||||
|
|
||||||
Similar as with relations, you can specify nested relations for sorting, filtering, search and relations:
|
```typescript
|
||||||
|
const config: PaginateConfig<CatEntity> = {
|
||||||
|
sortableColumns: ['id', 'name', 'toys.(size.height)', 'toys.(size.width)'],
|
||||||
|
searchableColumns: ['name'],
|
||||||
|
relations: ['toys'],
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage with Nested Relations
|
||||||
|
|
||||||
|
Similar as with relations, you can specify nested relations for sorting, filtering and searching:
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
#### Endpoint
|
#### Endpoint
|
||||||
|
|
||||||
```url
|
```url
|
||||||
http://localhost:3000/cats?filter.home.pillows.color=$eq:ping,String
|
http://localhost:3000/cats?filter.home.pillows.color=pink
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Code
|
#### Code
|
||||||
@ -376,29 +346,36 @@ const config: PaginateConfig<CatEntity> = {
|
|||||||
const result = await paginate<CatEntity>(query, catRepo, config)
|
const result = await paginate<CatEntity>(query, catRepo, config)
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage of pagination type
|
## Usage with Eager Loading
|
||||||
|
|
||||||
You can use either `limit`/`offset` or `take`/`skip` to return paginated results.
|
Eager loading should work with TypeORM's eager property out the box:
|
||||||
|
|
||||||
### Example
|
### Example
|
||||||
|
|
||||||
#### Code
|
#### Code
|
||||||
|
|
||||||
```typescript
|
```typescript
|
||||||
|
@Entity()
|
||||||
|
export class CatEntity {
|
||||||
|
// ...
|
||||||
|
|
||||||
|
@OneToMany(() => CatToyEntity, (catToy) => catToy.cat, {
|
||||||
|
eager: true,
|
||||||
|
})
|
||||||
|
toys: CatToyEntity[]
|
||||||
|
}
|
||||||
|
|
||||||
const config: PaginateConfig<CatEntity> = {
|
const config: PaginateConfig<CatEntity> = {
|
||||||
paginationType: PaginationType.LIMIT_AND_OFFSET,
|
loadEagerRelations: true,
|
||||||
// Or
|
sortableColumns: ['id', 'name', 'toys.name'],
|
||||||
paginationType: PaginationType.TAKE_AND_SKIP,
|
filterableColumns: {
|
||||||
|
'toys.name': [FilterOperator.IN],
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
const result = await paginate<CatEntity>(query, catRepo, config)
|
const result = await paginate<CatEntity>(query, catRepo, config)
|
||||||
```
|
```
|
||||||
|
|
||||||
> However, using `limit`/`offset` can return unexpected results.
|
|
||||||
> For more information
|
|
||||||
> see [#477](https://github.com/ppetzold/nestjs-paginate/issues/477), [#4742](https://github.com/typeorm/typeorm/issues/4742)
|
|
||||||
> and [#5670](https://github.com/typeorm/typeorm/issues/5670).
|
|
||||||
|
|
||||||
## Single Filters
|
## Single Filters
|
||||||
|
|
||||||
Filter operators must be whitelisted per column in `PaginateConfig`.
|
Filter operators must be whitelisted per column in `PaginateConfig`.
|
||||||
|
Loading…
Reference in New Issue
Block a user