Welcome Guest, Not a member yet? Register   Sign In
operator does not exist on updateBtach
#1

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.
Reply
#2

Can you show your updateBatch code?
Reply
#3

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
        )
Reply
#4

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. Dodgy
Reply
#5

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"
Reply




Theme © iAndrew 2016 - Forum software by © MyBB