1 | declare module '@ioc:Adonis/Lucid/Orm' {
|
2 | import { RawQuery, OneOrMany, StrictValues, QueryCallback, ChainableContract, RawBuilderContract, QueryClientContract, TransactionClientContract } from '@ioc:Adonis/Lucid/Database';
|
3 | |
4 |
|
5 |
|
6 |
|
7 |
|
8 | |
9 |
|
10 |
|
11 | type ExtractModelRelations<Model extends LucidRow> = {
|
12 | [Key in keyof Model]: Model[Key] extends ModelRelations ? Key : never;
|
13 | }[keyof Model];
|
14 | |
15 |
|
16 |
|
17 |
|
18 | type GetRelationModelInstance<Relation extends ModelRelations> = Relation['__opaque_type'] extends 'hasOne' | 'belongsTo' ? Relation['instance'] : Relation['instance'][];
|
19 | |
20 |
|
21 |
|
22 |
|
23 |
|
24 | |
25 |
|
26 |
|
27 |
|
28 | type RelationOptions<Related extends ModelRelations> = {
|
29 | localKey?: string;
|
30 | foreignKey?: string;
|
31 | serializeAs?: string | null;
|
32 | onQuery?(query: Related['builder'] | Related['subQuery']): void;
|
33 | };
|
34 | |
35 |
|
36 |
|
37 | type ManyToManyRelationOptions<Related extends ModelRelations> = {
|
38 | pivotTable?: string;
|
39 | localKey?: string;
|
40 | pivotForeignKey?: string;
|
41 | relatedKey?: string;
|
42 | pivotRelatedForeignKey?: string;
|
43 | pivotColumns?: string[];
|
44 | pivotTimestamps?: boolean | {
|
45 | createdAt: string | boolean;
|
46 | updatedAt: string | boolean;
|
47 | };
|
48 | serializeAs?: string | null;
|
49 | onQuery?(query: Related['builder'] | Related['subQuery']): void;
|
50 | };
|
51 | |
52 |
|
53 |
|
54 | type ThroughRelationOptions<Related extends ModelRelations> = RelationOptions<Related> & {
|
55 | throughLocalKey?: string;
|
56 | throughForeignKey?: string;
|
57 | throughModel: () => LucidModel;
|
58 | };
|
59 | |
60 |
|
61 |
|
62 |
|
63 |
|
64 | |
65 |
|
66 |
|
67 | type HasOneDecorator = <RelatedModel extends LucidModel>(model: () => RelatedModel, options?: RelationOptions<HasOne<RelatedModel>>) => TypedDecorator<HasOne<RelatedModel>>;
|
68 | |
69 |
|
70 |
|
71 | type HasManyDecorator = <RelatedModel extends LucidModel>(model: () => RelatedModel, options?: RelationOptions<HasOne<RelatedModel>>) => TypedDecorator<HasMany<RelatedModel>>;
|
72 | |
73 |
|
74 |
|
75 | type BelongsToDecorator = <RelatedModel extends LucidModel>(model: () => RelatedModel, options?: RelationOptions<HasOne<RelatedModel>>) => TypedDecorator<BelongsTo<RelatedModel>>;
|
76 | |
77 |
|
78 |
|
79 | type ManyToManyDecorator = <RelatedModel extends LucidModel>(model: () => RelatedModel, column?: ManyToManyRelationOptions<ManyToMany<RelatedModel>>) => TypedDecorator<ManyToMany<RelatedModel>>;
|
80 | |
81 |
|
82 |
|
83 | type HasManyThroughDecorator = <RelatedModel extends LucidModel>(model: [() => RelatedModel, () => LucidModel], column?: Omit<ThroughRelationOptions<HasManyThrough<RelatedModel>>, 'throughModel'>) => TypedDecorator<HasManyThrough<RelatedModel>>;
|
84 | |
85 |
|
86 |
|
87 |
|
88 |
|
89 |
|
90 |
|
91 |
|
92 |
|
93 | type ModelRelationTypes = {
|
94 | readonly __opaque_type: 'hasOne' | 'hasMany' | 'belongsTo' | 'manyToMany' | 'hasManyThrough';
|
95 | };
|
96 | |
97 |
|
98 |
|
99 | type HasOne<RelatedModel extends LucidModel, ParentModel extends LucidModel = LucidModel> = InstanceType<RelatedModel> & {
|
100 | readonly __opaque_type: 'hasOne';
|
101 | model: RelatedModel;
|
102 | instance: InstanceType<RelatedModel>;
|
103 | client: HasOneClientContract<HasOneRelationContract<ParentModel, RelatedModel>, RelatedModel>;
|
104 | builder: RelationQueryBuilderContract<RelatedModel, any>;
|
105 | subQuery: RelationSubQueryBuilderContract<RelatedModel>;
|
106 | };
|
107 | |
108 |
|
109 |
|
110 | type HasMany<RelatedModel extends LucidModel, ParentModel extends LucidModel = LucidModel> = InstanceType<RelatedModel>[] & {
|
111 | readonly __opaque_type: 'hasMany';
|
112 | model: RelatedModel;
|
113 | instance: InstanceType<RelatedModel>;
|
114 | client: HasManyClientContract<HasManyRelationContract<ParentModel, RelatedModel>, RelatedModel>;
|
115 | builder: HasManyQueryBuilderContract<RelatedModel, any>;
|
116 | subQuery: RelationSubQueryBuilderContract<RelatedModel>;
|
117 | };
|
118 | |
119 |
|
120 |
|
121 | type BelongsTo<RelatedModel extends LucidModel, ParentModel extends LucidModel = LucidModel> = InstanceType<RelatedModel> & {
|
122 | readonly __opaque_type: 'belongsTo';
|
123 | model: RelatedModel;
|
124 | instance: InstanceType<RelatedModel>;
|
125 | client: BelongsToClientContract<BelongsToRelationContract<ParentModel, RelatedModel>, RelatedModel>;
|
126 | builder: RelationQueryBuilderContract<RelatedModel, any>;
|
127 | subQuery: RelationSubQueryBuilderContract<RelatedModel>;
|
128 | };
|
129 | |
130 |
|
131 |
|
132 | type ManyToMany<RelatedModel extends LucidModel, ParentModel extends LucidModel = LucidModel> = InstanceType<RelatedModel>[] & {
|
133 | readonly __opaque_type: 'manyToMany';
|
134 | model: RelatedModel;
|
135 | instance: InstanceType<RelatedModel>;
|
136 | client: ManyToManyClientContract<ManyToManyRelationContract<ParentModel, RelatedModel>, RelatedModel>;
|
137 | builder: ManyToManyQueryBuilderContract<RelatedModel, any>;
|
138 | subQuery: ManyToManySubQueryBuilderContract<RelatedModel>;
|
139 | };
|
140 | |
141 |
|
142 |
|
143 | type HasManyThrough<RelatedModel extends LucidModel, ParentModel extends LucidModel = LucidModel> = InstanceType<RelatedModel>[] & {
|
144 | readonly __opaque_type: 'hasManyThrough';
|
145 | model: RelatedModel;
|
146 | instance: InstanceType<RelatedModel>;
|
147 | client: HasManyThroughClientContract<HasManyThroughRelationContract<ParentModel, RelatedModel>, RelatedModel>;
|
148 | builder: HasManyThroughQueryBuilderContract<RelatedModel, any>;
|
149 | subQuery: RelationSubQueryBuilderContract<RelatedModel>;
|
150 | };
|
151 | |
152 |
|
153 |
|
154 |
|
155 |
|
156 | type ModelRelations = HasOne<LucidModel, LucidModel> | HasMany<LucidModel, LucidModel> | BelongsTo<LucidModel, LucidModel> | ManyToMany<LucidModel, LucidModel> | HasManyThrough<LucidModel, LucidModel>;
|
157 | |
158 |
|
159 |
|
160 |
|
161 |
|
162 | |
163 |
|
164 |
|
165 | interface BaseRelationContract<ParentModel extends LucidModel, RelatedModel extends LucidModel> {
|
166 | readonly type: ModelRelationTypes['__opaque_type'];
|
167 | readonly relationName: string;
|
168 | readonly serializeAs: string | null;
|
169 | readonly booted: boolean;
|
170 | readonly model: ParentModel;
|
171 | relatedModel(): RelatedModel;
|
172 | boot(): void;
|
173 | clone(parent: LucidModel): this;
|
174 | |
175 |
|
176 |
|
177 | client(parent: InstanceType<ParentModel>, client: QueryClientContract): unknown;
|
178 | |
179 |
|
180 |
|
181 | eagerQuery(parent: OneOrMany<InstanceType<ParentModel>>, client: QueryClientContract): RelationQueryBuilderContract<RelatedModel, InstanceType<RelatedModel>>;
|
182 | subQuery(client: QueryClientContract): RelationSubQueryBuilderContract<RelatedModel>;
|
183 | }
|
184 | |
185 |
|
186 |
|
187 | interface HasOneRelationContract<ParentModel extends LucidModel, RelatedModel extends LucidModel> extends BaseRelationContract<ParentModel, RelatedModel> {
|
188 | readonly type: 'hasOne';
|
189 | readonly localKey: string;
|
190 | readonly foreignKey: string;
|
191 | |
192 |
|
193 |
|
194 | setRelated(parent: InstanceType<ParentModel>, related: InstanceType<RelatedModel> | null): void;
|
195 | |
196 |
|
197 |
|
198 | pushRelated(parent: InstanceType<ParentModel>, related: InstanceType<RelatedModel> | null): void;
|
199 | |
200 |
|
201 |
|
202 |
|
203 |
|
204 |
|
205 |
|
206 | setRelatedForMany(parent: InstanceType<ParentModel>[], related: InstanceType<RelatedModel>[]): void;
|
207 | |
208 |
|
209 |
|
210 |
|
211 | client(parent: InstanceType<ParentModel>, client: QueryClientContract): HasOneClientContract<this, RelatedModel>;
|
212 | |
213 |
|
214 |
|
215 | hydrateForPersistance(parent: LucidRow, values: ModelObject | LucidRow): void;
|
216 | }
|
217 | |
218 |
|
219 |
|
220 | interface HasManyRelationContract<ParentModel extends LucidModel, RelatedModel extends LucidModel> extends BaseRelationContract<ParentModel, RelatedModel> {
|
221 | readonly type: 'hasMany';
|
222 | readonly localKey: string;
|
223 | readonly foreignKey: string;
|
224 | |
225 |
|
226 |
|
227 | setRelated(parent: InstanceType<ParentModel>, related: InstanceType<RelatedModel>[]): void;
|
228 | |
229 |
|
230 |
|
231 | pushRelated(parent: InstanceType<ParentModel>, related: OneOrMany<InstanceType<RelatedModel>>): void;
|
232 | |
233 |
|
234 |
|
235 |
|
236 |
|
237 |
|
238 |
|
239 | setRelatedForMany(parent: InstanceType<ParentModel>[], related: InstanceType<RelatedModel>[]): void;
|
240 | |
241 |
|
242 |
|
243 |
|
244 | client(parent: InstanceType<ParentModel>, client: QueryClientContract): HasManyClientContract<this, RelatedModel>;
|
245 | |
246 |
|
247 |
|
248 | hydrateForPersistance(parent: LucidRow, values: ModelObject | LucidRow): void;
|
249 | }
|
250 | |
251 |
|
252 |
|
253 | interface BelongsToRelationContract<ParentModel extends LucidModel, RelatedModel extends LucidModel> extends BaseRelationContract<ParentModel, RelatedModel> {
|
254 | readonly type: 'belongsTo';
|
255 | readonly localKey: string;
|
256 | readonly foreignKey: string;
|
257 | |
258 |
|
259 |
|
260 | setRelated(parent: InstanceType<ParentModel>, related: InstanceType<RelatedModel> | null): void;
|
261 | |
262 |
|
263 |
|
264 | pushRelated(parent: InstanceType<ParentModel>, related: InstanceType<RelatedModel> | null): void;
|
265 | |
266 |
|
267 |
|
268 |
|
269 |
|
270 |
|
271 |
|
272 | setRelatedForMany(parent: InstanceType<ParentModel>[], related: InstanceType<RelatedModel>[]): void;
|
273 | |
274 |
|
275 |
|
276 | client(parent: InstanceType<ParentModel>, client: QueryClientContract): BelongsToClientContract<this, RelatedModel>;
|
277 | |
278 |
|
279 |
|
280 | hydrateForPersistance(parent: LucidRow, values: ModelObject | LucidRow): void;
|
281 | }
|
282 | |
283 |
|
284 |
|
285 | interface ManyToManyRelationContract<ParentModel extends LucidModel, RelatedModel extends LucidModel> extends BaseRelationContract<ParentModel, RelatedModel> {
|
286 | type: 'manyToMany';
|
287 | readonly localKey: string;
|
288 | readonly relatedKey: string;
|
289 | readonly pivotForeignKey: string;
|
290 | readonly pivotRelatedForeignKey: string;
|
291 | readonly pivotTable: string;
|
292 | pivotColumns: string[];
|
293 | |
294 |
|
295 |
|
296 | setRelated(parent: InstanceType<ParentModel>, related: InstanceType<RelatedModel>[]): void;
|
297 | |
298 |
|
299 |
|
300 | pushRelated(parent: InstanceType<ParentModel>, related: OneOrMany<InstanceType<RelatedModel>>): void;
|
301 | |
302 |
|
303 |
|
304 |
|
305 | setRelatedForMany(parent: InstanceType<ParentModel>[], related: InstanceType<RelatedModel>[]): void;
|
306 | |
307 |
|
308 |
|
309 | client(parent: InstanceType<ParentModel>, client: QueryClientContract): ManyToManyClientContract<this, RelatedModel>;
|
310 | |
311 |
|
312 |
|
313 | eagerQuery(parent: OneOrMany<InstanceType<ParentModel>>, client: QueryClientContract): ManyToManyQueryBuilderContract<RelatedModel, InstanceType<RelatedModel>>;
|
314 | |
315 |
|
316 |
|
317 | subQuery(client: QueryClientContract): ManyToManySubQueryBuilderContract<RelatedModel>;
|
318 | |
319 |
|
320 |
|
321 | getPivotPair(parent: LucidRow): [string, number | string];
|
322 | |
323 |
|
324 |
|
325 | getPivotRelatedPair(related: LucidRow): [string, number | string];
|
326 | }
|
327 | |
328 |
|
329 |
|
330 | interface HasManyThroughRelationContract<ParentModel extends LucidModel, RelatedModel extends LucidModel> extends BaseRelationContract<ParentModel, RelatedModel> {
|
331 | type: 'hasManyThrough';
|
332 | readonly localKey: string;
|
333 | readonly foreignKey: string;
|
334 | readonly throughLocalKey: string;
|
335 | readonly throughForeignKey: string;
|
336 | |
337 |
|
338 |
|
339 | setRelated(parent: InstanceType<ParentModel>, related: InstanceType<RelatedModel>[]): void;
|
340 | |
341 |
|
342 |
|
343 | pushRelated(parent: InstanceType<ParentModel>, related: InstanceType<RelatedModel> | InstanceType<RelatedModel>[]): void;
|
344 | |
345 |
|
346 |
|
347 |
|
348 | setRelatedForMany(parent: InstanceType<ParentModel>[], related: InstanceType<RelatedModel>[]): void;
|
349 | |
350 |
|
351 |
|
352 | client(model: InstanceType<ParentModel>, client: QueryClientContract): RelationQueryClientContract<this, RelatedModel>;
|
353 | }
|
354 | |
355 |
|
356 |
|
357 | type RelationshipsContract = HasOneRelationContract<LucidModel, LucidModel> | HasManyRelationContract<LucidModel, LucidModel> | BelongsToRelationContract<LucidModel, LucidModel> | ManyToManyRelationContract<LucidModel, LucidModel> | HasManyThroughRelationContract<LucidModel, LucidModel>;
|
358 | |
359 |
|
360 |
|
361 |
|
362 |
|
363 | interface RelationQueryClientContract<Relation extends RelationshipsContract, RelatedModel extends LucidModel> {
|
364 | relation: Relation;
|
365 | |
366 |
|
367 |
|
368 | query<Result = InstanceType<RelatedModel>>(): RelationQueryBuilderContract<RelatedModel, Result>;
|
369 | }
|
370 | |
371 |
|
372 |
|
373 | interface HasOneClientContract<Relation extends RelationshipsContract, RelatedModel extends LucidModel> extends RelationQueryClientContract<Relation, RelatedModel> {
|
374 | |
375 |
|
376 |
|
377 | save(related: InstanceType<RelatedModel>): Promise<void>;
|
378 | |
379 |
|
380 |
|
381 | create(values: Partial<ModelAttributes<InstanceType<RelatedModel>>>): Promise<InstanceType<RelatedModel>>;
|
382 | |
383 |
|
384 |
|
385 | firstOrCreate(search: Partial<ModelAttributes<InstanceType<RelatedModel>>>, savePayload?: Partial<ModelAttributes<InstanceType<RelatedModel>>>): Promise<InstanceType<RelatedModel>>;
|
386 | |
387 |
|
388 |
|
389 | updateOrCreate(search: Partial<ModelAttributes<InstanceType<RelatedModel>>>, updatePayload: Partial<ModelAttributes<InstanceType<RelatedModel>>>): Promise<InstanceType<RelatedModel>>;
|
390 | }
|
391 | |
392 |
|
393 |
|
394 |
|
395 | interface HasManyClientContract<Relation extends RelationshipsContract, RelatedModel extends LucidModel> extends HasOneClientContract<Relation, RelatedModel> {
|
396 | |
397 |
|
398 |
|
399 | saveMany(related: InstanceType<RelatedModel>[]): Promise<void>;
|
400 | |
401 |
|
402 |
|
403 | createMany(values: Partial<ModelAttributes<InstanceType<RelatedModel>>>[]): Promise<InstanceType<RelatedModel>[]>;
|
404 | |
405 |
|
406 |
|
407 | fetchOrCreateMany(payload: Partial<ModelAttributes<InstanceType<RelatedModel>>>[], predicate?: keyof ModelAttributes<InstanceType<RelatedModel>> | (keyof ModelAttributes<InstanceType<RelatedModel>>)[]): Promise<InstanceType<RelatedModel>[]>;
|
408 | |
409 |
|
410 |
|
411 | updateOrCreateMany(payload: Partial<ModelAttributes<InstanceType<RelatedModel>>>[], predicate?: keyof ModelAttributes<InstanceType<RelatedModel>> | (keyof ModelAttributes<InstanceType<RelatedModel>>)[]): Promise<InstanceType<RelatedModel>[]>;
|
412 | |
413 |
|
414 |
|
415 | query<Result = InstanceType<RelatedModel>>(): HasManyQueryBuilderContract<RelatedModel, Result>;
|
416 | }
|
417 | |
418 |
|
419 |
|
420 |
|
421 | interface BelongsToClientContract<Relation extends RelationshipsContract, RelatedModel extends LucidModel> extends RelationQueryClientContract<Relation, RelatedModel> {
|
422 | |
423 |
|
424 |
|
425 | associate(related: InstanceType<RelatedModel>): Promise<void>;
|
426 | |
427 |
|
428 |
|
429 | dissociate(): Promise<void>;
|
430 | }
|
431 | |
432 |
|
433 |
|
434 | interface ManyToManyClientContract<Relation extends RelationshipsContract, RelatedModel extends LucidModel> extends RelationQueryClientContract<Relation, RelatedModel> {
|
435 | |
436 |
|
437 |
|
438 | query<Result = InstanceType<RelatedModel>>(): ManyToManyQueryBuilderContract<RelatedModel, Result>;
|
439 | |
440 |
|
441 |
|
442 | pivotQuery<Result = any>(): ManyToManyQueryBuilderContract<RelatedModel, Result>;
|
443 | |
444 |
|
445 |
|
446 | save(related: InstanceType<RelatedModel>, performSync?: boolean,
|
447 | pivotAttributes?: ModelObject): Promise<void>;
|
448 | |
449 |
|
450 |
|
451 | saveMany(related: InstanceType<RelatedModel>[], performSync?: boolean,
|
452 | pivotAttributes?: (ModelObject | undefined)[]): Promise<void>;
|
453 | |
454 |
|
455 |
|
456 | create(values: Partial<ModelAttributes<InstanceType<RelatedModel>>>, pivotAttributes?: ModelObject): Promise<InstanceType<RelatedModel>>;
|
457 | |
458 |
|
459 |
|
460 | createMany(values: Partial<ModelAttributes<InstanceType<RelatedModel>>>[], pivotAttributes?: (ModelObject | undefined)[]): Promise<InstanceType<RelatedModel>[]>;
|
461 | |
462 |
|
463 |
|
464 | attach(ids: (string | number)[] | Record<string, ModelObject>, trx?: TransactionClientContract): Promise<void>;
|
465 | |
466 |
|
467 |
|
468 | detach(ids?: (string | number)[], trx?: TransactionClientContract): Promise<void>;
|
469 | |
470 |
|
471 |
|
472 | sync(ids: (string | number)[] | Record<string, ModelObject>, detach?: boolean, trx?: TransactionClientContract): Promise<void>;
|
473 | }
|
474 | |
475 |
|
476 |
|
477 |
|
478 |
|
479 | interface HasManyThroughClientContract<Relation extends RelationshipsContract, RelatedModel extends LucidModel> extends RelationQueryClientContract<Relation, RelatedModel> {
|
480 | |
481 |
|
482 |
|
483 | query<Result = InstanceType<RelatedModel>>(): HasManyThroughQueryBuilderContract<RelatedModel, Result>;
|
484 | }
|
485 | |
486 |
|
487 |
|
488 |
|
489 |
|
490 | |
491 |
|
492 |
|
493 |
|
494 | interface PivotQueryBuilderContract {
|
495 | pivotColumns(columns: string[]): this;
|
496 | wherePivot: WherePivot<this>;
|
497 | orWherePivot: WherePivot<this>;
|
498 | andWherePivot: WherePivot<this>;
|
499 | whereNotPivot: WherePivot<this>;
|
500 | orWhereNotPivot: WherePivot<this>;
|
501 | andWhereNotPivot: WherePivot<this>;
|
502 | whereInPivot: WhereInPivot<this>;
|
503 | orWhereInPivot: WhereInPivot<this>;
|
504 | andWhereInPivot: WhereInPivot<this>;
|
505 | whereNotInPivot: WhereInPivot<this>;
|
506 | orWhereNotInPivot: WhereInPivot<this>;
|
507 | andWhereNotInPivot: WhereInPivot<this>;
|
508 | whereNullPivot: WhereNullPivot<this>;
|
509 | orWhereNullPivot: WhereNullPivot<this>;
|
510 | andWhereNullPivot: WhereNullPivot<this>;
|
511 | whereNotNullPivot: WhereNullPivot<this>;
|
512 | orWhereNotNullPivot: WhereNullPivot<this>;
|
513 | andWhereNotNullPivot: WhereNullPivot<this>;
|
514 | }
|
515 | |
516 |
|
517 |
|
518 | interface RelationQueryBuilderContract<Related extends LucidModel, Result> extends ModelQueryBuilderContract<Related, Result> {
|
519 | |
520 |
|
521 |
|
522 | isRelatedQuery: true;
|
523 | |
524 |
|
525 |
|
526 | isRelatedSubQuery: false;
|
527 | |
528 |
|
529 |
|
530 | isRelatedPreloadQuery: boolean;
|
531 | selectRelationKeys(): this;
|
532 | }
|
533 | |
534 |
|
535 |
|
536 | interface HasManyQueryBuilderContract<Related extends LucidModel, Result> extends RelationQueryBuilderContract<Related, Result> {
|
537 | groupLimit(limit: number): this;
|
538 | groupOrderBy(column: string, direction?: 'asc' | 'desc'): this;
|
539 | }
|
540 | |
541 |
|
542 |
|
543 | interface HasManyThroughQueryBuilderContract<Related extends LucidModel, Result> extends RelationQueryBuilderContract<Related, Result> {
|
544 | groupLimit(limit: number): this;
|
545 | groupOrderBy(column: string, direction?: 'asc' | 'desc'): this;
|
546 | }
|
547 | |
548 |
|
549 |
|
550 | interface WherePivot<Builder> {
|
551 | (key: string, value: StrictValues | ChainableContract): Builder;
|
552 | (key: string, operator: string, value: StrictValues | ChainableContract): Builder;
|
553 | }
|
554 | |
555 |
|
556 |
|
557 | interface WhereNullPivot<Builder> {
|
558 | (key: string): Builder;
|
559 | }
|
560 | |
561 |
|
562 |
|
563 | interface WhereInPivot<Builder> {
|
564 | (K: string, value: StrictValues[]): Builder;
|
565 | (K: string[], value: StrictValues[][]): Builder;
|
566 | (k: string, subquery: ChainableContract | QueryCallback<Builder> | RawBuilderContract | RawQuery): Builder;
|
567 | (k: string[], subquery: ChainableContract | RawBuilderContract | RawQuery): Builder;
|
568 | }
|
569 | |
570 |
|
571 |
|
572 |
|
573 | interface ManyToManyQueryBuilderContract<Related extends LucidModel, Result> extends RelationQueryBuilderContract<Related, Result>, PivotQueryBuilderContract {
|
574 | isPivotOnlyQuery: boolean;
|
575 | groupLimit(limit: number): this;
|
576 | groupOrderBy(column: string, direction?: 'asc' | 'desc'): this;
|
577 | }
|
578 | |
579 |
|
580 |
|
581 |
|
582 |
|
583 | |
584 |
|
585 |
|
586 |
|
587 | type UnSupportedSubQueryMethods = 'preload' | 'decrement' | 'increment' | 'update' | 'paginate' | 'delete' | 'del' | 'firstOrFail' | 'first' | 'exec' | 'withCount';
|
588 | |
589 |
|
590 |
|
591 |
|
592 |
|
593 |
|
594 |
|
595 |
|
596 | interface RelationSubQueryBuilderContract<Related extends LucidModel> extends ModelQueryBuilderContract<Related, any> {
|
597 | |
598 |
|
599 |
|
600 | isRelatedQuery: false;
|
601 | |
602 |
|
603 |
|
604 | isRelatedSubQuery: true;
|
605 | |
606 |
|
607 |
|
608 | isRelatedPreloadQuery: false;
|
609 | selfJoinCounter: number;
|
610 | readonly selfJoinAlias: string;
|
611 | selectRelationKeys(): this;
|
612 | prepare(): this;
|
613 | }
|
614 | |
615 |
|
616 |
|
617 | interface ManyToManySubQueryBuilderContract<Related extends LucidModel> extends RelationSubQueryBuilderContract<Related>, PivotQueryBuilderContract {
|
618 | }
|
619 | |
620 |
|
621 |
|
622 | interface WithCount<Model extends LucidRow, Builder> {
|
623 | <Name extends ExtractModelRelations<Model>, RelatedBuilder = Model[Name] extends ModelRelations ? Model[Name]['subQuery'] : never>(relation: Name, callback?: (builder: RelatedBuilder) => void): Builder;
|
624 | }
|
625 | /**
|
626 | * The with aggregate function
|
627 | */
|
628 | interface WithAggregate<Model extends LucidRow, Builder> {
|
629 | <Name extends ExtractModelRelations<Model>, RelatedBuilder = Model[Name] extends ModelRelations ? Model[Name]['subQuery'] : never>(relation: Name, callback: (builder: RelatedBuilder) => void): Builder;
|
630 | }
|
631 | /**
|
632 | * The has function
|
633 | */
|
634 | interface Has<Model extends LucidRow, Builder> {
|
635 | <Name extends ExtractModelRelations<Model>>(relation: Name, operator?: string, value?: StrictValues | ChainableContract): Builder;
|
636 | }
|
637 | /**
|
638 | * The whereHas function
|
639 | */
|
640 | interface WhereHas<Model extends LucidRow, Builder> {
|
641 | <Name extends ExtractModelRelations<Model>, RelatedBuilder = Model[Name] extends ModelRelations ? Model[Name]['subQuery'] : never>(relation: Name, callback: (builder: RelatedBuilder) => void, operator?: string, value?: StrictValues | ChainableContract): Builder;
|
642 | }
|
643 | /**
|
644 | * ------------------------------------------------------
|
645 | * Preloader
|
646 | * ------------------------------------------------------
|
647 | */
|
648 | /**
|
649 | * The preload function
|
650 | */
|
651 | interface Preload<Model extends LucidRow, Builder> {
|
652 | <Name extends ExtractModelRelations<Model>, RelatedBuilder = Model[Name] extends ModelRelations ? Model[Name]['builder'] : never>(relation: Name, callback?: (builder: RelatedBuilder) => void): Builder;
|
653 | }
|
654 | /**
|
655 | * Shape of the preloader to preload relationships
|
656 | */
|
657 | interface PreloaderContract<Model extends LucidRow> {
|
658 | processAllForOne(parent: Model, client: QueryClientContract): Promise<void>;
|
659 | processAllForMany(parent: Model[], client: QueryClientContract): Promise<void>;
|
660 | load: Preload<Model, this>;
|
661 | preload: Preload<Model, this>;
|
662 | debug(debug: boolean): this;
|
663 | sideload(values: ModelObject): this;
|
664 | }
|
665 | }
|
666 |
|
\ | No newline at end of file |