Cakephp3中与sum的自动关系

时间:2019-04-26 14:13:20

标签: php mysql sql relationship cakephp-3.5

我正在尝试在'CakePHP-3.5'中建立hasOne关系,并在下表之间建立Quantidade列的总和:

腰果:

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”,“ belongsTo”?

谢谢。

0 个答案:

没有答案