@arikajs/database 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +392 -25
- package/dist/Connections/MongoDBConnection.d.ts +81 -0
- package/dist/Connections/MongoDBConnection.d.ts.map +1 -0
- package/dist/Connections/MongoDBConnection.js +203 -0
- package/dist/Connections/MongoDBConnection.js.map +1 -0
- package/dist/Connections/MySQLConnection.d.ts +1 -0
- package/dist/Connections/MySQLConnection.d.ts.map +1 -1
- package/dist/Connections/MySQLConnection.js +47 -10
- package/dist/Connections/MySQLConnection.js.map +1 -1
- package/dist/Connections/PostgreSQLConnection.d.ts +1 -0
- package/dist/Connections/PostgreSQLConnection.d.ts.map +1 -1
- package/dist/Connections/PostgreSQLConnection.js +43 -9
- package/dist/Connections/PostgreSQLConnection.js.map +1 -1
- package/dist/Connections/SQLiteConnection.d.ts +1 -0
- package/dist/Connections/SQLiteConnection.d.ts.map +1 -1
- package/dist/Connections/SQLiteConnection.js +38 -7
- package/dist/Connections/SQLiteConnection.js.map +1 -1
- package/dist/Contracts/Database.d.ts +71 -4
- package/dist/Contracts/Database.d.ts.map +1 -1
- package/dist/Contracts/Schema.d.ts +4 -0
- package/dist/Contracts/Schema.d.ts.map +1 -1
- package/dist/Database.d.ts +30 -3
- package/dist/Database.d.ts.map +1 -1
- package/dist/Database.js +39 -1
- package/dist/Database.js.map +1 -1
- package/dist/DatabaseManager.d.ts +17 -3
- package/dist/DatabaseManager.d.ts.map +1 -1
- package/dist/DatabaseManager.js +27 -11
- package/dist/DatabaseManager.js.map +1 -1
- package/dist/Migrations/Migrator.d.ts.map +1 -1
- package/dist/Migrations/Migrator.js +35 -3
- package/dist/Migrations/Migrator.js.map +1 -1
- package/dist/Model/GlobalScope.d.ts +44 -0
- package/dist/Model/GlobalScope.d.ts.map +1 -0
- package/dist/Model/GlobalScope.js +64 -0
- package/dist/Model/GlobalScope.js.map +1 -0
- package/dist/Model/Model.d.ts +168 -4
- package/dist/Model/Model.d.ts.map +1 -1
- package/dist/Model/Model.js +476 -16
- package/dist/Model/Model.js.map +1 -1
- package/dist/Model/Observer.d.ts +39 -0
- package/dist/Model/Observer.d.ts.map +1 -0
- package/dist/Model/Observer.js +48 -0
- package/dist/Model/Observer.js.map +1 -0
- package/dist/Model/Relations.d.ts +201 -10
- package/dist/Model/Relations.d.ts.map +1 -1
- package/dist/Model/Relations.js +472 -27
- package/dist/Model/Relations.js.map +1 -1
- package/dist/Query/Expression.d.ts +16 -0
- package/dist/Query/Expression.d.ts.map +1 -0
- package/dist/Query/Expression.js +25 -0
- package/dist/Query/Expression.js.map +1 -0
- package/dist/Query/QueryBuilder.d.ts +64 -6
- package/dist/Query/QueryBuilder.d.ts.map +1 -1
- package/dist/Query/QueryBuilder.js +234 -15
- package/dist/Query/QueryBuilder.js.map +1 -1
- package/dist/Query/QueryLogger.d.ts +55 -0
- package/dist/Query/QueryLogger.d.ts.map +1 -0
- package/dist/Query/QueryLogger.js +82 -0
- package/dist/Query/QueryLogger.js.map +1 -0
- package/dist/Schema/Grammars/Grammar.d.ts +5 -0
- package/dist/Schema/Grammars/Grammar.d.ts.map +1 -1
- package/dist/Schema/Grammars/Grammar.js.map +1 -1
- package/dist/Schema/Grammars/MySQLGrammar.d.ts +1 -0
- package/dist/Schema/Grammars/MySQLGrammar.d.ts.map +1 -1
- package/dist/Schema/Grammars/MySQLGrammar.js +42 -0
- package/dist/Schema/Grammars/MySQLGrammar.js.map +1 -1
- package/dist/Schema/Grammars/PostgreSQLGrammar.d.ts +1 -0
- package/dist/Schema/Grammars/PostgreSQLGrammar.d.ts.map +1 -1
- package/dist/Schema/Grammars/PostgreSQLGrammar.js +46 -0
- package/dist/Schema/Grammars/PostgreSQLGrammar.js.map +1 -1
- package/dist/Schema/Grammars/SQLiteGrammar.d.ts +1 -0
- package/dist/Schema/Grammars/SQLiteGrammar.d.ts.map +1 -1
- package/dist/Schema/Grammars/SQLiteGrammar.js +31 -0
- package/dist/Schema/Grammars/SQLiteGrammar.js.map +1 -1
- package/dist/Schema/Schema.d.ts +6 -0
- package/dist/Schema/Schema.d.ts.map +1 -1
- package/dist/Schema/Schema.js +10 -0
- package/dist/Schema/Schema.js.map +1 -1
- package/dist/Schema/SchemaBuilder.d.ts +4 -0
- package/dist/Schema/SchemaBuilder.d.ts.map +1 -1
- package/dist/Schema/SchemaBuilder.js +15 -0
- package/dist/Schema/SchemaBuilder.js.map +1 -1
- package/dist/Transactions/TransactionManager.d.ts +28 -0
- package/dist/Transactions/TransactionManager.d.ts.map +1 -0
- package/dist/Transactions/TransactionManager.js +68 -0
- package/dist/Transactions/TransactionManager.js.map +1 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -1
- package/dist/index.js.map +1 -1
- package/package.json +10 -6
package/dist/Model/Relations.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.BelongsToMany = exports.BelongsTo = exports.HasMany = exports.HasOne = exports.Relation = void 0;
|
|
3
|
+
exports.MorphTo = exports.MorphMany = exports.MorphOne = exports.HasManyThrough = exports.HasOneThrough = exports.BelongsToMany = exports.BelongsTo = exports.HasMany = exports.HasOne = exports.Relation = void 0;
|
|
4
4
|
const Database_1 = require("../Database");
|
|
5
|
+
// ─── Base ──────────────────────────────────────────────────────────────────
|
|
5
6
|
/**
|
|
6
7
|
* Base class for all relationship types
|
|
7
8
|
*/
|
|
@@ -10,11 +11,22 @@ class Relation {
|
|
|
10
11
|
this.related = related;
|
|
11
12
|
this.parent = parent;
|
|
12
13
|
}
|
|
14
|
+
/**
|
|
15
|
+
* Compare if a related model instance is the same as another
|
|
16
|
+
*/
|
|
17
|
+
is(model) {
|
|
18
|
+
if (!model)
|
|
19
|
+
return false;
|
|
20
|
+
const instance = new this.related();
|
|
21
|
+
const pk = instance['getPrimaryKey']();
|
|
22
|
+
return this.parent[pk] === model[pk];
|
|
23
|
+
}
|
|
24
|
+
isNot(model) {
|
|
25
|
+
return !this.is(model);
|
|
26
|
+
}
|
|
13
27
|
}
|
|
14
28
|
exports.Relation = Relation;
|
|
15
|
-
|
|
16
|
-
* Has One relationship
|
|
17
|
-
*/
|
|
29
|
+
// ─── Has One ───────────────────────────────────────────────────────────────
|
|
18
30
|
class HasOne extends Relation {
|
|
19
31
|
constructor(related, parent, foreignKey, localKey = 'id') {
|
|
20
32
|
super(related, parent);
|
|
@@ -23,9 +35,8 @@ class HasOne extends Relation {
|
|
|
23
35
|
}
|
|
24
36
|
async get() {
|
|
25
37
|
const parentKeyValue = this.parent[this.localKey];
|
|
26
|
-
if (!parentKeyValue)
|
|
38
|
+
if (!parentKeyValue)
|
|
27
39
|
return null;
|
|
28
|
-
}
|
|
29
40
|
return await this.related
|
|
30
41
|
.where(this.foreignKey, parentKeyValue)
|
|
31
42
|
.first();
|
|
@@ -34,11 +45,35 @@ class HasOne extends Relation {
|
|
|
34
45
|
const parentKeyValue = this.parent[this.localKey];
|
|
35
46
|
return this.related.query().where(this.foreignKey, parentKeyValue);
|
|
36
47
|
}
|
|
48
|
+
getRelationCountQuery(outerTable, outerKey = this.localKey) {
|
|
49
|
+
const relatedTable = this.related.table;
|
|
50
|
+
return {
|
|
51
|
+
sql: `(SELECT COUNT(*) FROM ${relatedTable} WHERE ${relatedTable}.${this.foreignKey} = ${outerTable}.${outerKey})`,
|
|
52
|
+
bindings: []
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Create a related record and associate it with the parent
|
|
57
|
+
*/
|
|
58
|
+
async create(data) {
|
|
59
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
60
|
+
return this.related.query().create({
|
|
61
|
+
...data,
|
|
62
|
+
[this.foreignKey]: parentKeyValue,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Save a related model and associate it with the parent
|
|
67
|
+
*/
|
|
68
|
+
async save(model) {
|
|
69
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
70
|
+
model.setAttribute(this.foreignKey, parentKeyValue);
|
|
71
|
+
await model.save();
|
|
72
|
+
return model;
|
|
73
|
+
}
|
|
37
74
|
}
|
|
38
75
|
exports.HasOne = HasOne;
|
|
39
|
-
|
|
40
|
-
* Has Many relationship
|
|
41
|
-
*/
|
|
76
|
+
// ─── Has Many ──────────────────────────────────────────────────────────────
|
|
42
77
|
class HasMany extends Relation {
|
|
43
78
|
constructor(related, parent, foreignKey, localKey = 'id') {
|
|
44
79
|
super(related, parent);
|
|
@@ -47,9 +82,8 @@ class HasMany extends Relation {
|
|
|
47
82
|
}
|
|
48
83
|
async get() {
|
|
49
84
|
const parentKeyValue = this.parent[this.localKey];
|
|
50
|
-
if (!parentKeyValue)
|
|
85
|
+
if (!parentKeyValue)
|
|
51
86
|
return [];
|
|
52
|
-
}
|
|
53
87
|
return await this.related
|
|
54
88
|
.where(this.foreignKey, parentKeyValue)
|
|
55
89
|
.get();
|
|
@@ -58,11 +92,47 @@ class HasMany extends Relation {
|
|
|
58
92
|
const parentKeyValue = this.parent[this.localKey];
|
|
59
93
|
return this.related.query().where(this.foreignKey, parentKeyValue);
|
|
60
94
|
}
|
|
95
|
+
getRelationCountQuery(outerTable, outerKey = this.localKey) {
|
|
96
|
+
const relatedTable = this.related.table;
|
|
97
|
+
return {
|
|
98
|
+
sql: `(SELECT COUNT(*) FROM ${relatedTable} WHERE ${relatedTable}.${this.foreignKey} = ${outerTable}.${outerKey})`,
|
|
99
|
+
bindings: []
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Create a related record
|
|
104
|
+
*/
|
|
105
|
+
async create(data) {
|
|
106
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
107
|
+
return this.related.query().create({
|
|
108
|
+
...data,
|
|
109
|
+
[this.foreignKey]: parentKeyValue,
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Bulk-create multiple related records
|
|
114
|
+
*/
|
|
115
|
+
async createMany(records) {
|
|
116
|
+
return Promise.all(records.map(data => this.create(data)));
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Save a related model and associate it with the parent
|
|
120
|
+
*/
|
|
121
|
+
async save(model) {
|
|
122
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
123
|
+
model.setAttribute(this.foreignKey, parentKeyValue);
|
|
124
|
+
await model.save();
|
|
125
|
+
return model;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Save multiple related models
|
|
129
|
+
*/
|
|
130
|
+
async saveMany(models) {
|
|
131
|
+
return Promise.all(models.map(m => this.save(m)));
|
|
132
|
+
}
|
|
61
133
|
}
|
|
62
134
|
exports.HasMany = HasMany;
|
|
63
|
-
|
|
64
|
-
* Belongs To relationship
|
|
65
|
-
*/
|
|
135
|
+
// ─── Belongs To ────────────────────────────────────────────────────────────
|
|
66
136
|
class BelongsTo extends Relation {
|
|
67
137
|
constructor(related, parent, foreignKey, ownerKey = 'id') {
|
|
68
138
|
super(related, parent);
|
|
@@ -71,9 +141,8 @@ class BelongsTo extends Relation {
|
|
|
71
141
|
}
|
|
72
142
|
async get() {
|
|
73
143
|
const foreignKeyValue = this.parent[this.foreignKey];
|
|
74
|
-
if (!foreignKeyValue)
|
|
144
|
+
if (!foreignKeyValue)
|
|
75
145
|
return null;
|
|
76
|
-
}
|
|
77
146
|
return await this.related
|
|
78
147
|
.where(this.ownerKey, foreignKeyValue)
|
|
79
148
|
.first();
|
|
@@ -82,11 +151,29 @@ class BelongsTo extends Relation {
|
|
|
82
151
|
const foreignKeyValue = this.parent[this.foreignKey];
|
|
83
152
|
return this.related.query().where(this.ownerKey, foreignKeyValue);
|
|
84
153
|
}
|
|
154
|
+
getRelationCountQuery(outerTable, outerKey = this.foreignKey) {
|
|
155
|
+
const relatedTable = this.related.table;
|
|
156
|
+
return {
|
|
157
|
+
sql: `(SELECT COUNT(*) FROM ${relatedTable} WHERE ${relatedTable}.${this.ownerKey} = ${outerTable}.${outerKey})`,
|
|
158
|
+
bindings: []
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Associate this model with the given related model (sets the FK on parent)
|
|
163
|
+
*/
|
|
164
|
+
associate(model) {
|
|
165
|
+
this.parent.setAttribute(this.foreignKey, model[this.ownerKey]);
|
|
166
|
+
return this;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Dissociate — nullify the foreign key on the parent
|
|
170
|
+
*/
|
|
171
|
+
dissociate() {
|
|
172
|
+
this.parent.setAttribute(this.foreignKey, null);
|
|
173
|
+
return this;
|
|
174
|
+
}
|
|
85
175
|
}
|
|
86
176
|
exports.BelongsTo = BelongsTo;
|
|
87
|
-
/**
|
|
88
|
-
* Belongs To Many relationship (many-to-many)
|
|
89
|
-
*/
|
|
90
177
|
class BelongsToMany extends Relation {
|
|
91
178
|
constructor(related, parent, pivotTable, foreignPivotKey, relatedPivotKey, parentKey = 'id', relatedKey = 'id') {
|
|
92
179
|
super(related, parent);
|
|
@@ -95,30 +182,388 @@ class BelongsToMany extends Relation {
|
|
|
95
182
|
this.relatedPivotKey = relatedPivotKey;
|
|
96
183
|
this.parentKey = parentKey;
|
|
97
184
|
this.relatedKey = relatedKey;
|
|
185
|
+
this.pivotColumns = [];
|
|
186
|
+
this.pivotWheres = [];
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Include extra pivot columns in the result
|
|
190
|
+
*/
|
|
191
|
+
withPivot(...columns) {
|
|
192
|
+
this.pivotColumns.push(...columns);
|
|
193
|
+
return this;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Filter results by a pivot column value
|
|
197
|
+
*/
|
|
198
|
+
wherePivot(column, value) {
|
|
199
|
+
this.pivotWheres.push({ column, value });
|
|
200
|
+
return this;
|
|
98
201
|
}
|
|
99
202
|
async get() {
|
|
100
203
|
const parentKeyValue = this.parent[this.parentKey];
|
|
101
|
-
if (!parentKeyValue)
|
|
204
|
+
if (!parentKeyValue)
|
|
102
205
|
return [];
|
|
103
|
-
}
|
|
104
206
|
const relatedTable = this.related.table;
|
|
105
207
|
const connection = await Database_1.Database.connection(this.related.connection);
|
|
106
|
-
// Build the
|
|
208
|
+
// Build the pivot extra columns selector
|
|
209
|
+
const pivotCols = this.pivotColumns
|
|
210
|
+
.map(c => `${this.pivotTable}.${c} AS __pivot_${c}`)
|
|
211
|
+
.join(', ');
|
|
212
|
+
const selectExtra = pivotCols ? `, ${pivotCols}` : '';
|
|
213
|
+
// Build pivot where clauses
|
|
214
|
+
const pivotWhereSQL = this.pivotWheres
|
|
215
|
+
.map(w => `AND ${this.pivotTable}.${w.column} = ?`)
|
|
216
|
+
.join(' ');
|
|
217
|
+
const pivotWhereBindings = this.pivotWheres.map(w => w.value);
|
|
107
218
|
const sql = `
|
|
108
|
-
SELECT ${relatedTable}
|
|
219
|
+
SELECT ${relatedTable}.*${selectExtra}
|
|
109
220
|
FROM ${relatedTable}
|
|
110
|
-
INNER JOIN ${this.pivotTable}
|
|
221
|
+
INNER JOIN ${this.pivotTable}
|
|
111
222
|
ON ${relatedTable}.${this.relatedKey} = ${this.pivotTable}.${this.relatedPivotKey}
|
|
112
223
|
WHERE ${this.pivotTable}.${this.foreignPivotKey} = ?
|
|
224
|
+
${pivotWhereSQL}
|
|
113
225
|
`;
|
|
114
|
-
const results = await connection.query(sql, [parentKeyValue]);
|
|
115
|
-
// Hydrate the results into model instances
|
|
226
|
+
const results = await connection.query(sql, [parentKeyValue, ...pivotWhereBindings]);
|
|
116
227
|
return results.map((data) => {
|
|
117
228
|
const instance = new this.related();
|
|
118
|
-
|
|
229
|
+
// Separate pivot columns from model columns
|
|
230
|
+
const pivotData = {};
|
|
231
|
+
const modelData = {};
|
|
232
|
+
for (const [key, val] of Object.entries(data)) {
|
|
233
|
+
if (key.startsWith('__pivot_')) {
|
|
234
|
+
pivotData[key.replace('__pivot_', '')] = val;
|
|
235
|
+
}
|
|
236
|
+
else {
|
|
237
|
+
modelData[key] = val;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
instance.fill(modelData);
|
|
241
|
+
instance.setExists(true);
|
|
242
|
+
// Attach pivot data as a property on the model
|
|
243
|
+
instance.pivot = pivotData;
|
|
119
244
|
return instance;
|
|
120
245
|
});
|
|
121
246
|
}
|
|
247
|
+
getRelationCountQuery(outerTable, outerKey = this.parentKey) {
|
|
248
|
+
const relatedTable = this.related.table;
|
|
249
|
+
const pivotWhereSQL = this.pivotWheres
|
|
250
|
+
.map(w => `AND ${this.pivotTable}.${w.column} = ?`)
|
|
251
|
+
.join(' ');
|
|
252
|
+
const pivotWhereBindings = this.pivotWheres.map(w => w.value);
|
|
253
|
+
const sql = `(SELECT COUNT(*) FROM ${relatedTable} INNER JOIN ${this.pivotTable} ON ${relatedTable}.${this.relatedKey} = ${this.pivotTable}.${this.relatedPivotKey} WHERE ${this.pivotTable}.${this.foreignPivotKey} = ${outerTable}.${outerKey} ${pivotWhereSQL})`;
|
|
254
|
+
return { sql, bindings: pivotWhereBindings };
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Attach one or many related models to the pivot table
|
|
258
|
+
*/
|
|
259
|
+
async attach(ids, pivotData = {}) {
|
|
260
|
+
const parentKeyValue = this.parent[this.parentKey];
|
|
261
|
+
const connection = await Database_1.Database.connection(this.related.connection);
|
|
262
|
+
const idList = Array.isArray(ids) ? ids : [ids];
|
|
263
|
+
const extraCols = Object.keys(pivotData);
|
|
264
|
+
const extraVals = Object.values(pivotData);
|
|
265
|
+
for (const relatedId of idList) {
|
|
266
|
+
const cols = [this.foreignPivotKey, this.relatedPivotKey, ...extraCols].join(', ');
|
|
267
|
+
const placeholders = [parentKeyValue, relatedId, ...extraVals].map(() => '?').join(', ');
|
|
268
|
+
const sql = `INSERT INTO ${this.pivotTable} (${cols}) VALUES (${placeholders})`;
|
|
269
|
+
await connection.query(sql, [parentKeyValue, relatedId, ...extraVals]);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Detach one, many, or all related models from the pivot table
|
|
274
|
+
*/
|
|
275
|
+
async detach(ids) {
|
|
276
|
+
const parentKeyValue = this.parent[this.parentKey];
|
|
277
|
+
const connection = await Database_1.Database.connection(this.related.connection);
|
|
278
|
+
if (ids === undefined) {
|
|
279
|
+
// Detach all
|
|
280
|
+
await connection.query(`DELETE FROM ${this.pivotTable} WHERE ${this.foreignPivotKey} = ?`, [parentKeyValue]);
|
|
281
|
+
}
|
|
282
|
+
else {
|
|
283
|
+
const idList = Array.isArray(ids) ? ids : [ids];
|
|
284
|
+
const placeholders = idList.map(() => '?').join(', ');
|
|
285
|
+
await connection.query(`DELETE FROM ${this.pivotTable} WHERE ${this.foreignPivotKey} = ? AND ${this.relatedPivotKey} IN (${placeholders})`, [parentKeyValue, ...idList]);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Sync the pivot table — attach missing, detach extras
|
|
290
|
+
*/
|
|
291
|
+
async sync(ids, pivotData = {}) {
|
|
292
|
+
const parentKeyValue = this.parent[this.parentKey];
|
|
293
|
+
const connection = await Database_1.Database.connection(this.related.connection);
|
|
294
|
+
// Get current pivot IDs
|
|
295
|
+
const existing = await connection.query(`SELECT ${this.relatedPivotKey} FROM ${this.pivotTable} WHERE ${this.foreignPivotKey} = ?`, [parentKeyValue]);
|
|
296
|
+
const existingIds = existing.map((row) => row[this.relatedPivotKey]);
|
|
297
|
+
const toAttach = ids.filter(id => !existingIds.includes(id));
|
|
298
|
+
const toDetach = existingIds.filter((id) => !ids.includes(id));
|
|
299
|
+
if (toAttach.length > 0)
|
|
300
|
+
await this.attach(toAttach, pivotData);
|
|
301
|
+
if (toDetach.length > 0)
|
|
302
|
+
await this.detach(toDetach);
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Toggle — attach if not present, detach if already present
|
|
306
|
+
*/
|
|
307
|
+
async toggle(ids) {
|
|
308
|
+
const parentKeyValue = this.parent[this.parentKey];
|
|
309
|
+
const connection = await Database_1.Database.connection(this.related.connection);
|
|
310
|
+
const idList = Array.isArray(ids) ? ids : [ids];
|
|
311
|
+
const existing = await connection.query(`SELECT ${this.relatedPivotKey} FROM ${this.pivotTable} WHERE ${this.foreignPivotKey} = ?`, [parentKeyValue]);
|
|
312
|
+
const existingIds = existing.map((row) => row[this.relatedPivotKey]);
|
|
313
|
+
const toAttach = idList.filter((id) => !existingIds.includes(id));
|
|
314
|
+
const toDetach = idList.filter((id) => existingIds.includes(id));
|
|
315
|
+
if (toAttach.length > 0)
|
|
316
|
+
await this.attach(toAttach);
|
|
317
|
+
if (toDetach.length > 0)
|
|
318
|
+
await this.detach(toDetach);
|
|
319
|
+
}
|
|
122
320
|
}
|
|
123
321
|
exports.BelongsToMany = BelongsToMany;
|
|
322
|
+
// ─── Has One Through ───────────────────────────────────────────────────────
|
|
323
|
+
/**
|
|
324
|
+
* HasOneThrough — relate models through an intermediate table.
|
|
325
|
+
*
|
|
326
|
+
* Example: Country → hasOneThrough(Capital, User)
|
|
327
|
+
* countries → through users → capitals
|
|
328
|
+
*/
|
|
329
|
+
class HasOneThrough extends Relation {
|
|
330
|
+
constructor(related, parent, through, firstKey, // FK on through table pointing to parent
|
|
331
|
+
secondKey, // FK on related table pointing to through
|
|
332
|
+
localKey = 'id', // PK of parent
|
|
333
|
+
secondLocalKey = 'id' // PK of through model
|
|
334
|
+
) {
|
|
335
|
+
super(related, parent);
|
|
336
|
+
this.through = through;
|
|
337
|
+
this.firstKey = firstKey;
|
|
338
|
+
this.secondKey = secondKey;
|
|
339
|
+
this.localKey = localKey;
|
|
340
|
+
this.secondLocalKey = secondLocalKey;
|
|
341
|
+
}
|
|
342
|
+
async get() {
|
|
343
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
344
|
+
if (!parentKeyValue)
|
|
345
|
+
return null;
|
|
346
|
+
const throughTable = this.through.table;
|
|
347
|
+
const relatedTable = this.related.table;
|
|
348
|
+
const connection = await Database_1.Database.connection(this.related.connection);
|
|
349
|
+
const sql = `
|
|
350
|
+
SELECT ${relatedTable}.*
|
|
351
|
+
FROM ${relatedTable}
|
|
352
|
+
INNER JOIN ${throughTable}
|
|
353
|
+
ON ${relatedTable}.${this.secondKey} = ${throughTable}.${this.secondLocalKey}
|
|
354
|
+
WHERE ${throughTable}.${this.firstKey} = ?
|
|
355
|
+
LIMIT 1
|
|
356
|
+
`;
|
|
357
|
+
const results = await connection.query(sql, [parentKeyValue]);
|
|
358
|
+
if (!results.length)
|
|
359
|
+
return null;
|
|
360
|
+
const instance = new this.related();
|
|
361
|
+
instance.fill(results[0]);
|
|
362
|
+
instance.setExists(true);
|
|
363
|
+
return instance;
|
|
364
|
+
}
|
|
365
|
+
getRelationCountQuery(outerTable, outerKey = this.localKey) {
|
|
366
|
+
const throughTable = this.through.table;
|
|
367
|
+
const relatedTable = this.related.table;
|
|
368
|
+
const sql = `(SELECT COUNT(*) FROM ${relatedTable} INNER JOIN ${throughTable} ON ${relatedTable}.${this.secondKey} = ${throughTable}.${this.secondLocalKey} WHERE ${throughTable}.${this.firstKey} = ${outerTable}.${outerKey})`;
|
|
369
|
+
return { sql, bindings: [] };
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
exports.HasOneThrough = HasOneThrough;
|
|
373
|
+
// ─── Has Many Through ──────────────────────────────────────────────────────
|
|
374
|
+
/**
|
|
375
|
+
* HasManyThrough — relate models through an intermediate table.
|
|
376
|
+
*
|
|
377
|
+
* Example: Country → hasManyThrough(Post, User)
|
|
378
|
+
* countries → through users → posts
|
|
379
|
+
*/
|
|
380
|
+
class HasManyThrough extends Relation {
|
|
381
|
+
constructor(related, parent, through, firstKey, secondKey, localKey = 'id', secondLocalKey = 'id') {
|
|
382
|
+
super(related, parent);
|
|
383
|
+
this.through = through;
|
|
384
|
+
this.firstKey = firstKey;
|
|
385
|
+
this.secondKey = secondKey;
|
|
386
|
+
this.localKey = localKey;
|
|
387
|
+
this.secondLocalKey = secondLocalKey;
|
|
388
|
+
}
|
|
389
|
+
async get() {
|
|
390
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
391
|
+
if (!parentKeyValue)
|
|
392
|
+
return [];
|
|
393
|
+
const throughTable = this.through.table;
|
|
394
|
+
const relatedTable = this.related.table;
|
|
395
|
+
const connection = await Database_1.Database.connection(this.related.connection);
|
|
396
|
+
const sql = `
|
|
397
|
+
SELECT ${relatedTable}.*
|
|
398
|
+
FROM ${relatedTable}
|
|
399
|
+
INNER JOIN ${throughTable}
|
|
400
|
+
ON ${relatedTable}.${this.secondKey} = ${throughTable}.${this.secondLocalKey}
|
|
401
|
+
WHERE ${throughTable}.${this.firstKey} = ?
|
|
402
|
+
`;
|
|
403
|
+
const results = await connection.query(sql, [parentKeyValue]);
|
|
404
|
+
return results.map((data) => {
|
|
405
|
+
const instance = new this.related();
|
|
406
|
+
instance.fill(data);
|
|
407
|
+
instance.setExists(true);
|
|
408
|
+
return instance;
|
|
409
|
+
});
|
|
410
|
+
}
|
|
411
|
+
query() {
|
|
412
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
413
|
+
const throughTable = this.through.table;
|
|
414
|
+
const relatedTable = this.related.table;
|
|
415
|
+
return Database_1.Database.table(relatedTable)
|
|
416
|
+
.whereRaw(`${relatedTable}.${this.secondKey} IN (SELECT ${this.secondLocalKey} FROM ${throughTable} WHERE ${this.firstKey} = ?)`, [parentKeyValue]);
|
|
417
|
+
}
|
|
418
|
+
getRelationCountQuery(outerTable, outerKey = this.localKey) {
|
|
419
|
+
const throughTable = this.through.table;
|
|
420
|
+
const relatedTable = this.related.table;
|
|
421
|
+
const sql = `(SELECT COUNT(*) FROM ${relatedTable} INNER JOIN ${throughTable} ON ${relatedTable}.${this.secondKey} = ${throughTable}.${this.secondLocalKey} WHERE ${throughTable}.${this.firstKey} = ${outerTable}.${outerKey})`;
|
|
422
|
+
return { sql, bindings: [] };
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
exports.HasManyThrough = HasManyThrough;
|
|
426
|
+
// ─── Polymorphic Relationships ─────────────────────────────────────────────
|
|
427
|
+
/**
|
|
428
|
+
* MorphOne — polymorphic has-one
|
|
429
|
+
*
|
|
430
|
+
* Example: Post → morphOne(Image, 'imageable')
|
|
431
|
+
* images table has: imageable_id, imageable_type
|
|
432
|
+
*/
|
|
433
|
+
class MorphOne extends Relation {
|
|
434
|
+
constructor(related, parent, morphName, // e.g. 'imageable'
|
|
435
|
+
morphType, // column: imageable_type
|
|
436
|
+
morphId, // column: imageable_id
|
|
437
|
+
localKey = 'id') {
|
|
438
|
+
super(related, parent);
|
|
439
|
+
this.morphName = morphName;
|
|
440
|
+
this.morphType = morphType;
|
|
441
|
+
this.morphId = morphId;
|
|
442
|
+
this.localKey = localKey;
|
|
443
|
+
}
|
|
444
|
+
getMorphType() {
|
|
445
|
+
return this.parent.constructor.name;
|
|
446
|
+
}
|
|
447
|
+
async get() {
|
|
448
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
449
|
+
if (!parentKeyValue)
|
|
450
|
+
return null;
|
|
451
|
+
return await this.related
|
|
452
|
+
.where(this.morphType, this.getMorphType())
|
|
453
|
+
.where(this.morphId, parentKeyValue)
|
|
454
|
+
.first();
|
|
455
|
+
}
|
|
456
|
+
query() {
|
|
457
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
458
|
+
return this.related.query()
|
|
459
|
+
.where(this.morphType, this.getMorphType())
|
|
460
|
+
.where(this.morphId, parentKeyValue);
|
|
461
|
+
}
|
|
462
|
+
async create(data) {
|
|
463
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
464
|
+
return this.related.query().create({
|
|
465
|
+
...data,
|
|
466
|
+
[this.morphType]: this.getMorphType(),
|
|
467
|
+
[this.morphId]: parentKeyValue,
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
getRelationCountQuery(outerTable, outerKey = this.localKey) {
|
|
471
|
+
const relatedTable = this.related.table;
|
|
472
|
+
const sql = `(SELECT COUNT(*) FROM ${relatedTable} WHERE ${relatedTable}.${this.morphId} = ${outerTable}.${outerKey} AND ${relatedTable}.${this.morphType} = ?)`;
|
|
473
|
+
return { sql, bindings: [this.getMorphType()] };
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
exports.MorphOne = MorphOne;
|
|
477
|
+
/**
|
|
478
|
+
* MorphMany — polymorphic has-many
|
|
479
|
+
*
|
|
480
|
+
* Example: Post → morphMany(Comment, 'commentable')
|
|
481
|
+
*/
|
|
482
|
+
class MorphMany extends Relation {
|
|
483
|
+
constructor(related, parent, morphName, morphType, morphId, localKey = 'id') {
|
|
484
|
+
super(related, parent);
|
|
485
|
+
this.morphName = morphName;
|
|
486
|
+
this.morphType = morphType;
|
|
487
|
+
this.morphId = morphId;
|
|
488
|
+
this.localKey = localKey;
|
|
489
|
+
}
|
|
490
|
+
getMorphType() {
|
|
491
|
+
return this.parent.constructor.name;
|
|
492
|
+
}
|
|
493
|
+
async get() {
|
|
494
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
495
|
+
if (!parentKeyValue)
|
|
496
|
+
return [];
|
|
497
|
+
return await this.related
|
|
498
|
+
.where(this.morphType, this.getMorphType())
|
|
499
|
+
.where(this.morphId, parentKeyValue)
|
|
500
|
+
.get();
|
|
501
|
+
}
|
|
502
|
+
query() {
|
|
503
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
504
|
+
return this.related.query()
|
|
505
|
+
.where(this.morphType, this.getMorphType())
|
|
506
|
+
.where(this.morphId, parentKeyValue);
|
|
507
|
+
}
|
|
508
|
+
async create(data) {
|
|
509
|
+
const parentKeyValue = this.parent[this.localKey];
|
|
510
|
+
return this.related.query().create({
|
|
511
|
+
...data,
|
|
512
|
+
[this.morphType]: this.getMorphType(),
|
|
513
|
+
[this.morphId]: parentKeyValue,
|
|
514
|
+
});
|
|
515
|
+
}
|
|
516
|
+
async createMany(records) {
|
|
517
|
+
return Promise.all(records.map(d => this.create(d)));
|
|
518
|
+
}
|
|
519
|
+
getRelationCountQuery(outerTable, outerKey = this.localKey) {
|
|
520
|
+
const relatedTable = this.related.table;
|
|
521
|
+
const sql = `(SELECT COUNT(*) FROM ${relatedTable} WHERE ${relatedTable}.${this.morphId} = ${outerTable}.${outerKey} AND ${relatedTable}.${this.morphType} = ?)`;
|
|
522
|
+
return { sql, bindings: [this.getMorphType()] };
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
exports.MorphMany = MorphMany;
|
|
526
|
+
/**
|
|
527
|
+
* MorphTo — inverse polymorphic relationship
|
|
528
|
+
*
|
|
529
|
+
* Example: Comment → morphTo('commentable')
|
|
530
|
+
* reads commentable_type + commentable_id to find the owner
|
|
531
|
+
*/
|
|
532
|
+
class MorphTo extends Relation {
|
|
533
|
+
constructor(parent, morphName, morphType, // column: commentable_type
|
|
534
|
+
morphId, // column: commentable_id
|
|
535
|
+
morphMap = {}) {
|
|
536
|
+
// Pass parent as related too (placeholder — resolved dynamically)
|
|
537
|
+
super(parent.constructor, parent);
|
|
538
|
+
this.morphName = morphName;
|
|
539
|
+
this.morphType = morphType;
|
|
540
|
+
this.morphId = morphId;
|
|
541
|
+
this.morphMap = new Map(Object.entries(morphMap));
|
|
542
|
+
}
|
|
543
|
+
/**
|
|
544
|
+
* Register a morph type → Model class mapping
|
|
545
|
+
*/
|
|
546
|
+
map(morphMap) {
|
|
547
|
+
for (const [key, val] of Object.entries(morphMap)) {
|
|
548
|
+
this.morphMap.set(key, val);
|
|
549
|
+
}
|
|
550
|
+
return this;
|
|
551
|
+
}
|
|
552
|
+
async get() {
|
|
553
|
+
const morphType = this.parent[this.morphType];
|
|
554
|
+
const morphId = this.parent[this.morphId];
|
|
555
|
+
if (!morphType || !morphId)
|
|
556
|
+
return null;
|
|
557
|
+
const relatedClass = this.morphMap.get(morphType);
|
|
558
|
+
if (!relatedClass) {
|
|
559
|
+
throw new Error(`No morph map entry for type "${morphType}". ` +
|
|
560
|
+
`Call .map({ '${morphType}': YourModel }) on this MorphTo instance.`);
|
|
561
|
+
}
|
|
562
|
+
return await relatedClass.find(morphId);
|
|
563
|
+
}
|
|
564
|
+
getRelationCountQuery(outerTable, outerKey = this.morphId) {
|
|
565
|
+
throw new Error('Calling withCount on a MorphTo relationship is not supported yet natively. Please count inside the mapped relations.');
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
exports.MorphTo = MorphTo;
|
|
124
569
|
//# sourceMappingURL=Relations.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Relations.js","sourceRoot":"","sources":["../../src/Model/Relations.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Relations.js","sourceRoot":"","sources":["../../src/Model/Relations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Raw query expression
|
|
3
|
+
*/
|
|
4
|
+
export declare class Expression {
|
|
5
|
+
protected value: string | number;
|
|
6
|
+
constructor(value: string | number);
|
|
7
|
+
/**
|
|
8
|
+
* Get the value of the expression
|
|
9
|
+
*/
|
|
10
|
+
getValue(): string | number;
|
|
11
|
+
/**
|
|
12
|
+
* Convert the expression to a string
|
|
13
|
+
*/
|
|
14
|
+
toString(): string;
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=Expression.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Expression.d.ts","sourceRoot":"","sources":["../../src/Query/Expression.ts"],"names":[],"mappings":"AACA;;GAEG;AACH,qBAAa,UAAU;IACP,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;gBAAtB,KAAK,EAAE,MAAM,GAAG,MAAM;IAE5C;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,MAAM;IAI3B;;OAEG;IACH,QAAQ,IAAI,MAAM;CAGrB"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Expression = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Raw query expression
|
|
6
|
+
*/
|
|
7
|
+
class Expression {
|
|
8
|
+
constructor(value) {
|
|
9
|
+
this.value = value;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Get the value of the expression
|
|
13
|
+
*/
|
|
14
|
+
getValue() {
|
|
15
|
+
return this.value;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Convert the expression to a string
|
|
19
|
+
*/
|
|
20
|
+
toString() {
|
|
21
|
+
return String(this.getValue());
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
exports.Expression = Expression;
|
|
25
|
+
//# sourceMappingURL=Expression.js.map
|