balderdashy / balderdashy/sails
One-to-many create parent + childs fails
- Dominant language
- JavaScript
- Stars
- 22.8k
- Forks
- 1.9k
- PR merge metrics
- No merged PRs in 30d
Description
**Node version**: v12.13.0
**Sails version** _(sails)_: 1.2.3
**DB adapter & version** : sails-mysql@5.7.23-cll-lve
**I have a model User (Parent):**
```
/**
* User.js
*
* @description :: A model definition represents a database table/collection.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
attributes: {
firstName: {
type: 'string'
},
lastName: {
type: 'string'
},
// Add a reference to Pets
pets: {
collection: 'pet',
via: 'owner'
}
}
};
```
**And Model Pet (Child):**
```
/**
* Pet.js
*
* @description :: A model definition represents a database table/collection.
* @docs :: https://sailsjs.com/docs/concepts/models-and-orm/models
*/
module.exports = {
attributes: {
breed: {
type: 'string'
},
type: {
type: 'string'
},
name: {
type: 'string'
},
// Add a reference to User
owner: {
model: 'user'
}
}
};
```
**Find/FindAll populating works fine, but when I try to create a header (User) and details (Pet) an error appears.**
```
**POST: http://localhost:1337/User **
{
"firstName": "Luis",
"lastName": "Reyes",
"pets": [
{
"breed": "labrador",
"type": "dog",
"name": "Princesa"
},
{
"breed": "labrador",
"type": "dog",
"name": "Luna"
}
]
}
```
**This is the error that returns:**
```
UsageError: Invalid criteria.
Details:
Could not use the provided `where` clause. Could not filter by `id`: Invalid item within `in` modifier array. Does not
match the declared data type of the corresponding attribute. 1 error validating value:
• Specified value (a dictionary: { breed: 'labrador', type: 'dog', name: 'Princesa' }) doesn't match the expected type:
'number'
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\lib\hooks\blueprints\actions\create.js:53:45
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:2489:9
at replenish (D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:946:17)
at iterateeCallback (D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:931:17)
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:906:16
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:2491:13
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\lib\hooks\blueprints\actions\create.js:71:14
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:2489:9
at replenish (D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:946:17)
at iterateeCallback (D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:931:17)
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:906:16
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:2491:13
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\lib\hooks\blueprints\actions\create.js:71:14
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:2489:9
at replenish (D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:946:17)
at iterateeCallback (D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:931:17)
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:906:16
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:2491:13
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\lib\hooks\blueprints\actions\create.js:71:14
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:2489:9
at replenish (D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:946:17)
at iterateeCallback (D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:931:17)
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:906:16
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:2491:13
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\lib\hooks\blueprints\actions\create.js:71:14
at D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:2489:9
at replenish (D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:946:17)
at iterateeCallback (D:\2.- Desarrollo\poc\backend\apierp\node_modules\sails\node_modules\async\dist\async.js:931:17)
```
Contributor guide
Research direction
Reproduce the POST to /User using the User.js and Pet.js association definitions, then trace the failure through node_modules/sails/lib/hooks/blueprints/actions/create.js. Compare the submitted pets values with the association criteria handling; done means creating a User with both Pets succeeds and the relationship can be retrieved with populate.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- javascript, mysql, node.js
- Domain
- api, backend, database
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 38/100