ORM saving multiple _joinData using patchEntity


#1

SupplierSchemasTable

$this->hasMany(‘SupplierSchemaItems’);

$this->belongsToMany(‘Suppliers’);

±—±---------+
| id | title |
±—±---------+
| 1 | schema_1 |
| 2 | schema_2 |
±—±---------+
SuppliersTable

$this->belongsToMany(‘SupplierSchemas’);

$this->belongsToMany(‘SupplierSchemaItems’, [
‘through’ => ‘SupplierSchemaItemsSuppliers’,
]);

±—±-----------+
| id | name |
±—±-----------+
| 1 | supplier_1 |
±—±-----------+
SupplierSchemasInputTypesTable

$this->hasMany(‘SupplierSchemaItems’);

±—±---------+
| id | title |
±—±---------+
| 1 | Text |
| 2 | Textarea |
| 3 | Select |
±—±---------+
SupplierSchemaItemsTable

$this->belongsTo(‘SupplierSchemas’);

$this->belongsToMany(‘Suppliers’, [
‘through’ => ‘SupplierSchemaItemsSuppliers’,
]);

±—±-------------------------±-------------------±-------------------------------+
| id | title | supplier_schema_id | supplier_schemas_input_type_id |
±—±-------------------------±-------------------±-------------------------------+
| 1 | Partners | 1 | 1 |
| 2 | Bio | 1 | 2 |
| 3 | Identification Documents | 1 | 3 |
±—±-------------------------±-------------------±-------------------------------+
SupplierSchemaItemsSuppliersTable

$this->belongsTo(‘SupplierSchemasInputTypes’);
$this->belongsTo(‘SupplierSchemaItems’);
$this->belongsTo(‘Suppliers’);

±—±------------------------±------------±------------------------+
| id | supplier_schema_item_id | supplier_id | value |
±—±------------------------±------------±------------------------+
| 1 | 1 | 1 | 4 |
| 2 | 2 | 1 | Supplier Bio Text |
| 3 | 3 | 1 | Current Signed Passport |
| 4 | 3 | 1 | Driving Licence |
±—±------------------------±------------±------------------------+
I need to allow admin to be able to update data in SupplierSchemaItemsSuppliersTable. However when I try to do so using below

$SuppliersTable->patchEntity($supplier, $this->request->data(), [
‘associated’ => [

‘SupplierSchemas.SupplierSchemaItems.Suppliers’,
]
]);
It works for rows where both supplier_schema_item_id and supplier_id is different. However for the select ( Identification Documents ) which can have more than one item it fails i.e. will only update the first record and delete the second one.

Below is the Data Dump for the request data:

array (
0 =>
array (
‘supplier_schema_items’ =>
array (
2 =>
array (
‘suppliers’ =>
array (
0 =>
array (
’_joinData’ =>
array (
‘value’ => ‘Current Signed Passport - Edit Test’,
‘id’ => ‘3’,
),
‘id’ => ‘1’,
),
1 =>
array (
’_joinData’ =>
array (
‘value’ => ‘Driving Licesnce - Edit Test 2’,
‘id’ => ‘4’,
),
‘id’ => ‘1’,
),
),
‘id’ => ‘3’,
),
),
‘id’ => ‘1’,
),
)