-
rdconsolo
Newbie
-
Posts: 9
Threads: 3
Joined: Sep 2021
Reputation:
2
Hi. I'm trying to do an updateBatch using this array https://imgur.com/a/EwB7sml on CI 4.3.7
id_mestre and item are the constrain fields
even on builder on model, the result is the same: operator does not exist
Any help would be appreciated
Thanks.
-
rdconsolo
Newbie
-
Posts: 9
Threads: 3
Joined: Sep 2021
Reputation:
2
Code: $estruturas_model = new EstruturasModel();
$estruturas_model->updateBatch($data2, 'id_mestre, item');
Code: <?php
namespace App\Models;
use CodeIgniter\Model;
class EstruturasModel extends Model
{
protected $DBGroup = 'default';
protected $table = 'cd_estruturas';
protected $primaryKey = 'id_cd_estruturas';
protected $useAutoIncrement = false;
protected $returnType = 'array';
protected $useSoftDeletes = false;
protected $protectFields = true;
protected $allowedFields = [
'id_cd_produtos',
'id_componente',
'nivel',
'item',
'peso_liquido',
'custo_unitario',
'custo_total',
'quantidade',
'id_mestre',
'uso_mp'
];
// Dates
protected $useTimestamps = false;
protected $dateFormat = 'datetime';
protected $createdField = 'created_at';
protected $updatedField = 'updated_at';
protected $deletedField = 'deleted_at';
// Validation
protected $validationRules = [];
protected $validationMessages = [];
protected $skipValidation = false;
protected $cleanValidationRules = true;
// Callbacks
protected $allowCallbacks = true;
protected $beforeInsert = [];
protected $afterInsert = [];
protected $beforeUpdate = [];
protected $afterUpdate = [];
protected $beforeFind = [];
protected $afterFind = [];
protected $beforeDelete = [];
protected $afterDelete = [];
}
Code: Array
(
[0] => Array
(
[id_cd_produtos] => 6034
[id_componente] => 5945
[nivel] => 1
[item] => 1
[peso_liquido] => 0.000
[custo_unitario] => 2377.96
[custo_total] => 28535.52
[quantidade] => 12.0000
[id_mestre] => 6034
[uso_mp] =>
[id_cd_estruturas] => 56813
)
[1] => Array
(
[id_cd_produtos] => 5945
[id_componente] => 2696
[nivel] => 2
[item] => 2
[peso_liquido] => 0.040
[custo_unitario] => 0.39
[custo_total] => 10.92
[quantidade] => 28.0000
[id_mestre] => 6034
[uso_mp] => C
[id_cd_estruturas] => 33108
)
-
rdconsolo
Newbie
-
Posts: 9
Threads: 3
Joined: Sep 2021
Reputation:
2
A simple test. First obtain an associative array from findAll(). Then do an updateBatch with that array will trigger the error.
Code: $estruturas_model = new EstruturasModel();
$data4 = $estruturas_model->where('id_mestre', 6034)->findAll();
$db = \Config\Database::connect();
$builder = $db->table('cd_estruturas');
$builder->onConstraint('id_mestre, item')->updateBatch($data4);
But if I create the same array on code, the error does not happen.
-
rdconsolo
Newbie
-
Posts: 9
Threads: 3
Joined: Sep 2021
Reputation:
2
SQL produced by CI4 (postgres):
Code: UPDATE "cd_estruturas"
SET
"custo_total" = _u."custo_total",
"custo_unitario" = _u."custo_unitario",
"id_cd_produtos" = _u."id_cd_produtos",
"id_componente" = _u."id_componente",
"nivel" = _u."nivel",
"peso_liquido" = _u."peso_liquido",
"quantidade" = _u."quantidade"
FROM (
SELECT 29248.91 "custo_total", 2377.96 "custo_unitario", '6034' "id_cd_produtos", '5945' "id_componente", '6034' "id_mestre", '1' "item", '1' "nivel", '0.000' "peso_liquido", '12.3000' "quantidade" UNION ALL
SELECT 10.92 "custo_total", 0.39 "custo_unitario", '5945' "id_cd_produtos", '2696' "id_componente", '6034' "id_mestre", '2' "item", '2' "nivel", '0.040' "peso_liquido", '28.0000' "quantidade" UNION ALL
SELECT 0.24 "custo_total", 0.24 "custo_unitario", '2696' "id_cd_produtos", '5121' "id_componente", '6034' "id_mestre", '3' "item", '3' "nivel", '0.030' "peso_liquido", '1.0000' "quantidade" UNION ALL
SELECT '0.24' "custo_total", '8.10' "custo_unitario", '5121' "id_cd_produtos", '1456' "id_componente", '6034' "id_mestre", '4' "item", '4' "nivel", '0.000' "peso_liquido", '0.0300' "quantidade" UNION ALL
SELECT '0.15' "custo_total", '0.15' "custo_unitario", '2696' "id_cd_produtos", '1395' "id_componente", '6034' "id_mestre", '5' "item", '3' "nivel", '0.000' "peso_liquido", '1.0000' "quantidade" UNION ALL
SELECT 2367.04 "custo_total", 2367.04 "custo_unitario", '5945' "id_cd_produtos", '5388' "id_componente", '6034' "id_mestre", '6' "item", '2' "nivel", '0.000' "peso_liquido", '1.0000' "quantidade" UNION ALL
SELECT 353.3 "custo_total", 353.3 "custo_unitario", '5388' "id_cd_produtos", '5474' "id_componente", '6034' "id_mestre", '7' "item", '3' "nivel", '0.000' "peso_liquido", '1.0000' "quantidade" UNION ALL
SELECT 54.28 "custo_total", 27.14 "custo_unitario", '5474' "id_cd_produtos", '5235' "id_componente", '6034' "id_mestre", '8' "item", '4' "nivel", '6.700' "peso_liquido", '2.0000' "quantidade" UNION ALL
SELECT '8.20' "custo_total", '8.10' "custo_unitario", '5129' "id_cd_produtos", '1456' "id_componente", '6034' "id_mestre", '33' "item", '5' "nivel", '0.000' "peso_liquido", '1.0120' "quantidade" UNION ALL
SELECT '2.48' "custo_total", '0.31' "custo_unitario", '2607' "id_cd_produtos", '1362' "id_componente", '6034' "id_mestre", '34' "item", '4' "nivel", '0.000' "peso_liquido", '8.0000' "quantidade" UNION ALL
SELECT '1.60' "custo_total", '0.20' "custo_unitario", '2607' "id_cd_produtos", '1369' "id_componente", '6034' "id_mestre", '35' "item", '4' "nivel", '0.000' "peso_liquido", '8.0000' "quantidade" UNION ALL
SELECT 285.21 "custo_total", 285.21 "custo_unitario", '5388' "id_cd_produtos", '2625' "id_componente", '6034' "id_mestre", '36' "item", '3' "nivel", '5.267' "peso_liquido", '1.0000' "quantidade" UNION ALL
SELECT '123.53' "custo_total", '88.05' "custo_unitario", '5234' "id_cd_produtos", '1447' "id_componente", '6034' "id_mestre", '97' "item", '4' "nivel", '0.000' "peso_liquido", '1.4030' "quantidade" UNION ALL
SELECT '0.00' "custo_total", '0.00' "custo_unitario", '5388' "id_cd_produtos", '1304' "id_componente", '6034' "id_mestre", '98' "item", '3' "nivel", '0.000' "peso_liquido", '6.0000' "quantidade" UNION ALL
SELECT '1.30' "custo_total", '0.13' "custo_unitario", '5388' "id_cd_produtos", '1373' "id_componente", '6034' "id_mestre", '99' "item", '3' "nivel", '0.000' "peso_liquido", '10.0000' "quantidade" UNION ALL
SELECT '0.44' "custo_total", '0.11' "custo_unitario", '5388' "id_cd_produtos", '1358' "id_componente", '6034' "id_mestre", '100' "item", '3' "nivel", '0.000' "peso_liquido", '4.0000' "quantidade"
) _u
WHERE "cd_estruturas"."id_mestre" = _u."id_mestre" AND "cd_estruturas"."item" = _u."item"
|