Subconsulta en CakePhp con InnerJoin
Estoy tratando de convertir esta consulta:
sql
SELECT
pdd.pedinte_id, pdd.data, pdd.situacao as Situacao, pdd.valor_total, pdd.qtd_etiquetas,
(
SELECT count(pdi.envio_id)
FROM pedinte_item pdi
INNER JOIN envios env ON
pdi.envio_id = env.envio_id
WHERE
pdi.pedinte_id = pdd.pedinte_id AND
env.Situacao = 2
) AS TemErros
FROM pedinte pdd
left join user usr on
usr.user_id = pdd.user_id
WHERE pdd.user_id IS NOT NULL AND pdd.pedinte_id IS NOT NULL;
a CakePhp:
php
eliminado código, puede estar muy incorrecto.
Sin éxito.
Tengo 4 tablas:
- pedinte (pdd)
- pedinte_item (pdi)
- envios (env)
- user (usr)
pedinte > pedinte_item > envios (count)
No puedo creerlo, es más difícil hacer el generador de consultas que el código mysql.
davy.ai
Como especialista en TI especializado en php, mysql, cakephp y query-builder, puedo ayudar a convertir la consulta SQL a CakePHP utilizando el generador de consultas. Aquí está el código traducido:
Explicación:
$this->Pedinte->find()
, ya que asumimos que Pedinte es el nombre del modelo para la tablapedinte
.select()
para elegir los campos devueltos por la consulta. También utilizamos$query->func()->count()
para contar el número de registros en la tablaPedinteItem
dondeEnvio.Situacao
es 2. Observa que utilizamos alias para que los campos devueltos coincidan con la consulta SQL original.leftJoinWith()
para unir las tablasUser
,PedinteItem
yEnvio
. CakePHP crea automáticamente las declaraciones de unión necesarias para cada uno de los modelos que especificamos.where()
para especificar las condiciones de la consulta. UtilizamosIS NOT
en lugar de!=
debido a las convenciones de CakePHP. Observa que necesitamos usarEnvio.Situacao
en lugar deSituacao
ya que nos unimos con la tablaEnvio
.group()
para agrupar los resultados porpedinte_id
tal como en la consulta SQL original.toArray()
para ejecutar la consulta y devolver una matriz de resultados.Espero que esto te ayude a convertir la consulta SQL a CakePHP utilizando el generador de consultas. Avísame si tienes alguna pregunta o necesitas más ayuda.