Автоотношение с суммой в cakephp3 - PullRequest
0 голосов
/ 26 апреля 2019

Я пытаюсь создать отношение hasOne в CakePHP-3.5 с суммой столбца квантидады между следующими таблицами:

brindes:

Field                     Type                                            
------------------------  ----------------------------------------------  
id                        bigint(20) unsigned                             
clientes_id               bigint(20) unsigned                             
nome                      varchar(45)                                     
codigo_primario           tinyint(1)                                      
tempo_uso_brinde          tinyint(2)                                      
ilimitado                 tinyint(1)                                      
habilitado                tinyint(1)                                      
tipo_equipamento          enum('Produtos/Serviços','Equipamento')     
tipo_venda                enum('Isento','Com Desconto','Gotas ou Reais')  
tipo_codigo_barras        enum('QRCode','Code128','PDF417')               
preco_padrao              float                                           
valor_moeda_venda_padrao  decimal(10,2)                                   
nome_img                  varchar(80)                                     
audit_insert              datetime                                        
audit_update              datetime                                        

brindes_estoque;

FIELD          TYPE                                                                                        
-------------  ------------------------------------------------------------------------------------------  
id             BIGINT(20) UNSIGNED                                                                         
brindes_id     BIGINT(20) UNSIGNED                                                                         
usuarios_id    BIGINT(20) UNSIGNED                                                                         
quantidade     INT(11)                                                                                     
tipo_operacao  ENUM('Inicialização','Adicionado ao Estoque','Saída Brinde','Saída Venda','Retornado')      
DATA           DATETIME                                                                                    
audit_insert   DATETIME                                                                                    
audit_update   DATETIME      

У 'Brindes' (Подарки) 'есть много Brindes_estoque (Gifts_Stock). Вот что я пытаюсь сделать:

$this->hasOne(
    "TotalEntrada",
    array(
        "className" => "BrindesEstoque",
        "foreignKey" => "brindes_id",
        "joinType" => Query::JOIN_TYPE_LEFT,
        "strategy" => "select",
        "fields" => array(
            "qteEntrada" => "SUM(TotalEntrada.quantidade)"
        ),
        "conditions" => array(
            "TotalEntrada.tipo_operacao" => TYPE_OPERATION_ADD_STOCK
        )

    )
);

С другой таблицей brindes_precos (Gifts_Prices) я могу взять последнюю запись, вставленную в базу данных, используя это соотношение:

Семейное положение:

$this->hasOne(
    "PrecoAtual",
    array(
        "className" => "BrindesPrecos",
        "foreignKey" => "brindes_id",
        "joinType" => Query::JOIN_TYPE_LEFT,
        "strategy" => "select",
        "conditions" => array(
            "PrecoAtual.status_autorizacao" => STATUS_AUTHORIZATION_PRICE_AUTHORIZED
        ),
        "ORDER" => array(
            "data" => "DESC"
        ),
        "limit" => 1
    )
);

Таблица brindes_precos:

Field               Type                                     
------------------  ---------------------------------------- 
id                  bigint(20) unsigned                      
brindes_id          bigint(20) unsigned                      
clientes_id         bigint(20) unsigned                      
preco               float                                    
valor_moeda_venda   decimal(10,2)                            
status_autorizacao  enum('Aguardando','Autorizado','Negado') 
data_preco          datetime                                 
audit_insert        datetime                                 
audit_update        datetime                                 

Эти отношения 'PrecoAtual' дают мне что-то вроде:

SELECT 
    PrecoAtual.id AS `PrecoAtual__id`, 
    PrecoAtual.brindes_id AS `PrecoAtual__brindes_id`, 
    PrecoAtual.clientes_id AS `PrecoAtual__clientes_id`, 
    PrecoAtual.preco AS `PrecoAtual__preco`, 
    PrecoAtual.valor_moeda_venda AS `PrecoAtual__valor_moeda_venda`, 
    PrecoAtual.status_autorizacao AS `PrecoAtual__status_autorizacao`, 
    PrecoAtual.data_preco AS `PrecoAtual__data_preco`, 
    PrecoAtual.audit_insert AS `PrecoAtual__audit_insert`, 
    PrecoAtual.audit_update AS `PrecoAtual__audit_update` 
FROM brindes_precos PrecoAtual 
WHERE (PrecoAtual.status_autorizacao = 'Autorizado' AND PrecoAtual.brindes_id in (15))

Я думаю, что главный вопрос ... я могу сделать что-то подобное? Второй вопрос: есть ли способ сделать отношения hasOne, ownTo с префиксными столбцами?

Заранее спасибо.

...