Codeigniter - Codeigniter between entre dos valores

 
Vista:
sin imagen de perfil
Val: 1
Ha mantenido su posición en Codeigniter (en relación al último mes)
Gráfica de Codeigniter

Codeigniter between entre dos valores

Publicado por julio (1 intervención) el 14/11/2019 14:02:10
Tengo la siguiente consulta en el modelo de codeigniter pero no me da resultados ya que el problema radica en el between, las variables $fechad y $fechah llegan desde el controlador pero necesito que el campo entradas.date_ent sea en formato "date". Con la forma de consulta de mysqli funciona pero no logro traducirla en codeigniter. Muchas gracias

Adjunto consulta en mysqli

1
2
$sql = ("SELECT entradas.id_entrada as id, productos.name as name, entradas.cantidad_ent as cant, entradas.date_ent as fecha, entradas.receptor as receptor, usuarios.user as usuario, entradas.remito_ent as remito, productos.nro_expediente as expediente  from entradas, productos, usuarios where date(entradas.date_ent) between '$fechad' and '$fechah' and entradas.id_area='$idarea' and productos.id_producto= entradas.id_producto and usuarios.Id_usuario= entradas.id_user order by entradas.date_ent desc ");
$query = mysqli_query($conn, $sql);

Adjunto consulta en modelo de codeigniter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function getentr($id_area, $fechah, $fechad) {
    $data = array();
 
    $select = "entradas.id_entrada id, productos.name name, entradas.cantidad_ent  cant, entradas.date_ent fecha, entradas.receptor receptor, usuarios.user  usuario, entradas.remito_ent remito, productos.nro_expediente expediente";
    $this->db->select($select);
    $this->db->from('entradas');
    $entre = "date(entradas.date_ent) between  '$fechad'  and '$fechah'";
    $this->db->where('entradas.id_area', $id_area);
    $this->db->where($entre);
    $this->db->join('productos', 'productos.id_producto = entradas.id_producto');
    $this->db->join('usuarios', 'usuarios.Id_usuario = entradas.id_user');
 
    $consulta = $this->db->get();
 
    $resultado = $consulta->result();
    return $resultado;
}


tambien probe con la siguiente forma en el between

1
2
$this->db->where('DATE(entradas.date_ent) >=', $fechad);
$this->db->where('DATE(entradas.date_ent) <=', $fechah);
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Consulta con BETWEEN para fechas en modelo

Publicado por Alejandro (44 intervenciones) el 04/09/2023 15:38:16
Para realizar una consulta en CodeIgniter utilizando la cláusula `BETWEEN` para fechas, debes formatear adecuadamente las fechas antes de usarlas en la consulta. Puedes hacerlo usando la función `STR_TO_DATE` para convertir las fechas en el formato correcto antes de usar `BETWEEN`. Aquí está cómo hacerlo en tu modelo de CodeIgniter:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public function getentr($id_area, $fechah, $fechad) {
    $data = array();
 
    $select = "entradas.id_entrada id, productos.name name, entradas.cantidad_ent  cant, entradas.date_ent fecha, entradas.receptor receptor, usuarios.user  usuario, entradas.remito_ent remito, productos.nro_expediente expediente";
    $this->db->select($select);
    $this->db->from('entradas');
    $this->db->where('entradas.id_area', $id_area);
 
    // Formatear las fechas utilizando STR_TO_DATE
    $this->db->where("STR_TO_DATE(entradas.date_ent, '%Y-%m-%d') BETWEEN '$fechad' AND '$fechah'", null, false);
 
    $this->db->join('productos', 'productos.id_producto = entradas.id_producto');
    $this->db->join('usuarios', 'usuarios.Id_usuario = entradas.id_user');
 
    $consulta = $this->db->get();
 
    $resultado = $consulta->result();
    return $resultado;
}

En esta consulta, utilizamos `STR_TO_DATE` para formatear las fechas en el campo `date_ent` al formato 'YYYY-MM-DD', que es el formato estándar de fechas en MySQL. Luego, aplicamos la cláusula `BETWEEN` en las fechas formateadas.

Es importante notar que pasamos `null, false` como segundo y tercer argumento en el método `where` para evitar que CodeIgniter realice automáticamente la protección de consultas SQL en esta parte de la cláusula `WHERE`, ya que estamos proporcionando directamente la parte formateada de la consulta.

Este enfoque debería permitirte realizar consultas de fechas utilizando `BETWEEN` en CodeIgniter de manera efectiva. Asegúrate de que las fechas `$fechad` y `$fechah` se proporcionen en el formato correcto ('YYYY-MM-DD') antes de utilizar esta función en tu modelo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar