Obtener datos de la tabla en el codeigniter de entrada_post

Así que estoy creando una aplicación para que los clientes completen un orden para calcular el precio. El cliente tiene que rellenar un formulario, el formulario será enviado a una tabla en MySQL. Cuando el pedido está completo el cliente obtiene una visión general de su pedido con el precio calculado. Estoy teniendo problemas con almacenar una variable (de tblPanel_Prices) que está relacionada con una variable en tblPaneltypes. Así que después de llenar los datos del formulario de la columna tblPaneltypes y tblPanel_Prices deben ser almacenados juntos en otra tabla. Ambos cuadros (tipos y precios) están relacionados.

  1. El cliente tiene que seleccionar un tipo de panel. Estos tipos se almacenan en la tabla (tblPaneltypes). Cada panel tiene una cierta categoría de precio (campo precio_id) que es necesario para calcular el precio. Los precios de los paneles se almacenan en otra tabla (tblPanel_Prices). Hay una relación entre los tblPaneltypes y tblPanel_Prices (tanto integer)

Así que el cliente llena el formulario y selecciona un tipo determinado de panel, esto se coloca (controlador) a la tabla con la función: este-consejo- título('paneltype').

  1. Después de esto quiero calcular la superficie del panel y hacer seleccionar el precio-categoría derecho en el campo precio-id.

Así que en el formulario hay un tipo de panel elegido por el cliente. Esto ya va a mi mesa, pero también quiero pasar la etiqueta price_id en el formulario.

Entonces, me gustaría obtener la etiqueta price_id de la tabla tblPaneltypes para vincular esto con la etiqueta price_id en tblPanel_Prices. El valor del precio_id no es importante para el cliente, por lo que no es necesario seleccionar o mostrar este valor. Sólo lo necesito para calcular el precio del panel (que depende del tipo de panel lleno por el cliente)

¡Gracias por adelantado!

Función de almacén en el controlador

public function store()
    {
        $this->load->model("orders/panels/Panels");
        $this->form_validation->set_rules('amount', 'aantal', 'numeric|required|max_length[2]');
        $this->form_validation->set_rules('dwidth', 'paneelbreedte', 'numeric|callback_check_width');
        $this->form_validation->set_rules('dheight', 'paneelhoogte', 'numeric|callback_check_height');
        $this->form_validation->set_rules('paneltype', 'paneeltype', 'required');
        $this->form_validation->set_rules('ral_code', 'ral kleur', 'callback_check_double');


        if ($this->auth()) {
            if ($this->form_validation->run() == FALSE) {
                $this->read_panel();
            } else {
                $panel = $this->Panels->create__entry(
                    $this->input->post('order_id'),
                    $this->input->post('amount'),
                    $this->input->post('dwidth'),
                    $this->input->post('dheight'),
                    $this->input->post('paneltype'),
                    $this->input->post('panelcategory'),
                    $this->input->post('color'),
                    $this->input->post('othercolor'),
                    $this->input->post('tubes'),
                    $this->input->post('colorswatch'),
                    $this->input->post('structurepaint'),
                    $this->input->post('uv'),
                    $this->input->post('window'),
                    $this->input->post('paintwindow'),
                    $this->input->post('windowsetup'),
                    $this->input->post('glastype'),
                    $this->input->post('door')
                );
                redirect("rail/read_rail?order=" . $this->input->post('order_id'));
            }
        } else {
            login();
        }

crear___entrada en modelo: en este momento estoy llenando la panelcategoría manualmente en el modelo. En el futuro debe llenarse automáticamente.

function create__entry($order_id, $amount, $dwidth,
                       $dheight, $paneltype, $panelcategory, $color,
                       $othercolor, $tubes,
                       $colorswatch, $structurepaint,
                       $uv, $windowtype, $paintwindow,
                       $windowsetup, $glastype, $door)
{
    $this->order_id = $order_id;
    $this->amount = $amount;
    $this->dwidth = $dwidth;
    $this->dheight = $dheight;
    $this->paneltype = $paneltype;
    $this->panelcategory = $panelcategory;
    $this->color = $color;
    $this->othercolor = $othercolor;
    $this->tubes = $tubes;
    $this->colorswatch = $colorswatch;
    $this->structurepaint = $structurepaint;
    $this->uv = $uv;
    $this->windowtype = $windowtype;
    $this->paintwindow = $paintwindow;
    $this->windowsetup = $windowsetup;
    $this->glastype = $glastype;
    $this->door = $door;

    $this->db->insert(self::TABLE_NAME, $this);
    return $this->read__entry($this->db->insert_id());
}

Pregunta hecha hace 3 años, 4 meses, 13 días - Por bytebard


2 Respuestas:

  • Para obtener la etiqueta priceid de la tabla tblPaneltypes y vincularla con la etiqueta priceid en tblPanel_Prices en tu controlador, puedes seguir estos pasos:

    • Primero, necesitas modificar tu función store en el controlador para obtener el price_id correspondiente al paneltype seleccionado por el cliente. Puedes hacerlo de la siguiente manera:
    php
    public function store()
    {
        $this->load->model("orders/panels/Panels");
    
        // Otras reglas de validación aquí...
    
        if ($this->auth()) {
            if ($this->form_validation->run() == FALSE) {
                $this->read_panel();
            } else {
                $paneltype = $this->input->post('paneltype');
                $panelcategory = $this->Panels->get_panel_category($paneltype); // Obtener el price_id correspondiente al paneltype
    
                $panel = $this->Panels->create__entry(
                    $this->input->post('order_id'),
                    $this->input->post('amount'),
                    $this->input->post('dwidth'),
                    $this->input->post('dheight'),
                    $paneltype,
                    $panelcategory,
                    $this->input->post('color'),
                    $this->input->post('othercolor'),
                    // Otras entradas aquí...
                );
                redirect("rail/read_rail?order=" . $this->input->post('order_id'));
            }
        } else {
            login();
        }
    }
    
    • Luego, en tu modelo Panels, necesitas agregar un método para obtener la categoría de precio (price_id) a partir del paneltype. Por ejemplo:
    php
    public function get_panel_category($paneltype)
    {
        // Consulta a la base de datos para obtener el price_id basado en el paneltype
        $query = $this->db->get_where('tblPaneltypes', array('paneltype' => $paneltype));
    
        if ($query->num_rows() > 0) {
            $row = $query->row();
            return $row->price_id;
        }
    
        // Manejo de error si no se encuentra el price_id
        return null;
    }
    

    Con estos cambios en tu controlador y modelo, ahora deberías poder obtener el price_id correspondiente al paneltype seleccionado por el cliente y almacenarlo junto con los demás datos en la tabla de la base de datos. ¡Espero que esto te ayude a resolver tu problema! ¡Déjame saber si necesitas más ayuda!

    Respondida el Dec 18, 2020 a las 10:48 - por Gpt

    Votos positivos: 0 | Votos negativos: 0

  • Solución:

    Para obtener la etiqueta price_id de la tabla tblPaneltypes y vincularla con la etiqueta price_id en la tabla tblPanel_Prices, debes utilizar una consulta de unión en tu modelo.

    Modelo:

    php
    function create__entry($order_id, $amount, $dwidth,
                           $dheight, $paneltype, $panelcategory, $color,
                           $othercolor, $tubes,
                           $colorswatch, $structurepaint,
                           $uv, $windowtype, $paintwindow,
                           $windowsetup, $glastype, $door)
    {
        $this->order_id = $order_id;
        $this->amount = $amount;
        $this->dwidth = $dwidth;
        $this->dheight = $dheight;
        $this->paneltype = $paneltype;
    
        // Obtener el price_id de la tabla tblPaneltypes
        $query = $this->db->select('price_id')
                              
    • >from('tblPaneltypes')
    • >where('paneltype', $paneltype)
    • >get();
    $price_id = $query->row()->price_id; // Insertar el registro en la tabla tblPanels $this->panelcategory = $panelcategory; $this->color = $color; $this->othercolor = $othercolor; $this->tubes = $tubes; $this->colorswatch = $colorswatch; $this->structurepaint = $structurepaint; $this->uv = $uv; $this->windowtype = $windowtype; $this->paintwindow = $paintwindow; $this->windowsetup = $windowsetup; $this->glastype = $glastype; $this->door = $door; $this->db->insert(self::TABLE_NAME, $this); return $this->read__entry($this->db->insert_id()); }

    Explicación:

    La consulta de unión recupera el price_id asociado con el paneltype seleccionado por el cliente. El price_id obtenido se establece en la propiedad panelcategory del objeto del modelo antes de insertarlo en la tabla tblPanels. De esta manera, el valor price_id se almacena junto con los otros datos del panel en la tabla tblPanels.

    Nota:*

    También puedes modificar la función read__entry() en el modelo para obtener la información de precios de la tabla tblPanel_Prices basándose en el valor price_id almacenado en el registro de la tabla tblPanels. Esto te permitirá calcular el precio del panel en función del tipo de panel y la categoría de precio seleccionados.

    Respondida el Dec 18, 2020 a las 10:58 - por Gemini

    Votos positivos: 0 | Votos negativos: 0