Foros del Web » Programando para Internet » PHP »

¿Como hacer los modelos?

Estas en el tema de ¿Como hacer los modelos? en el foro de PHP en Foros del Web. Buenos días a todos, me encuentro a punto de empezar a hacer modelos para Code Igniter y me entra la duda. En un sólo modelo ...
  #1 (permalink)  
Antiguo 08/05/2013, 04:09
 
Fecha de Ingreso: abril-2012
Mensajes: 590
Antigüedad: 12 años
Puntos: 58
¿Como hacer los modelos?

Buenos días a todos,

me encuentro a punto de empezar a hacer modelos para Code Igniter y me entra la duda. En un sólo modelo debería conectar varias tablas? Porque en principio pensé que tenía que crear un modelo para cada tabla pero empiezo a pensar que sería más lógico crear un modelo con tablas relacionadas.

Por ejemplo crear el modelo clientes pero que ya tenga también los pedidos, albaranes, facturas y demás que tenga que ver con los clientes.

¿Es esta la forma correcta?

Gracias.
Un saludo
  #2 (permalink)  
Antiguo 08/05/2013, 06:02
Avatar de repara2  
Fecha de Ingreso: septiembre-2010
Ubicación: München
Mensajes: 2.445
Antigüedad: 13 años, 7 meses
Puntos: 331
Respuesta: ¿Como hacer los modelos?

Si te refieres al modelo en tanto que patrón MVC, la forma correcta es tener una clase por modulo.
Si usas algún ORM entonces tendrás una clase por tabla.
En este sentido, el "modelo" no está estrictamente relacionado con la base de datos. En cualquier caso te recomiendo que leas la documentación de CodeIgniter y que postees el el foro de frameworks.
Salu2,
__________________
Fere libenter homines, id quod volunt, credunt.
  #3 (permalink)  
Antiguo 08/05/2013, 09:52
Avatar de efenollal  
Fecha de Ingreso: abril-2012
Ubicación: Toa Baja
Mensajes: 63
Antigüedad: 12 años
Puntos: 3
Respuesta: ¿Como hacer los modelos?

Ejemplo:

Digamos que tienes un controlador para los usuarios. Y en el controlador usuarios vas a crear usuarios, editar usuarios, leer la tabla usuarios y borrar usuarios puedes hacerlo en el mismo modelo. En Codeigniter seria:

Código PHP:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class 
Usuarios_model extends CI_Model
{
   
// Siempre inicializas el constructor de la clase CI_Model
    
function __construct()
    {
        
parent::__construct();
    }
        
    
// Llamas la tabla que desees
    
function ver_tu_tabla()
    {
        
$dbQuery          $this->db->get('nombre_tabla');
        return 
$dbQuery->result_array();
    }
    
    function 
editar_tabla()
    {
        
// editas tabla por id o lo que desees.
    
}
    
    
// Y todas las funciones relacionadas
    
    
}
Ya si vas a hacer algo no relacionado a lo que llamas en este modelo pues debes utilizar otro modelo. Si tienes dudas ve a la documentacion de Codeigniter.
  #4 (permalink)  
Antiguo 26/12/2014, 07:25
 
Fecha de Ingreso: octubre-2006
Mensajes: 267
Antigüedad: 17 años, 6 meses
Puntos: 6
Respuesta: ¿Como hacer los modelos?

Hola. Yo tengo la duda que este post pone en la mesa: ¿Debería hacer un modelo por tabla o un modelo por controlador?
He revisado la documentación de Codeginiter y sólo define la estructura de un modelo, pero no induce a algún criterio de cómo usarlo, lo que me hace creer que los modelos pueden usarse a gusto del desarrollador. No obstante, agradecería que algún experimentado comparta su experiencia con este u otro framework MVC. Gracias. Saludos.
  #5 (permalink)  
Antiguo 26/12/2014, 11:40
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: ¿Como hacer los modelos?

Cita:
Iniciado por metalfox6383 Ver Mensaje
¿Debería hacer un modelo por tabla o un modelo por controlador?
Ni una ni la otra. Eventualmente puede ser alguna de esas dos, pero no es una regla.

El modelo es lo que maneja la parte fisica y te ofrece las funciones para manejarlo de forma abstracta, esta ligado con la base de datos pero no con su estructura interna. Por ejemplo:
En la base de datos tienes la tabla "facturas" y "facturas_articulos".
El modelo no son 2 clases diferentes, es una sola, "Factura" que debe tener ademas de sus getters/setters los metodos para agregar y quitar artículos, y debe saber también como guardarlos, actualizarlos y borrarlos y leerlos.
Cada tabla en la base de datos, puede no tener ninguno, tener 1 o tener varios modelos asociados, cuando las tablas son grandes y complejas, es comun que aparezcan mas de un modelo que hacen un uso directo de una misma tabla para objetivos diferentes, esto se debe evitar pero hay veces que es necesario, hacerlo no viola para nada el concepto de MVC.

El controlador esta ligado con la funcionalidad, tu puedes querer ver una factura en detalle, ver un listado de todas o bien, ver una factura por cliente determinado, por dar ejemplos.
Para resolver estas funcionalidades, el controlador puede usar 1 o varios modelos, basicamente lo que hace es basarse en funciones del modelo para obtener los datos que el requerimiento funcional le pida.

La vista, esta ligada con la representacion o devolucion de esos datos devueltos por el controlador al usuario final, este usuario puede ser una persona real, otra computadora, otro sistema, etc.
Para cada funcion del controlador, puedes tener 1 o varias vistas, puedes mostrar los datos en json para que los vea javascript, en XML para que lo vea otro programa, o en html para que lo vea una persona, 3 vistas (o mas, o menos) para un mismo controlador.

Modelo -> Datos fisicos
Controlador -> Requerimientos funcionales
Vista -> Representacion de los datos para el usuario final

Cada capa es independiente, porque resuelve problemas totalmente diferentes.

Por cierto, la web no tiene una estructura MVC.
La web tiene una estructura Request-Response, por lo que elegir MVC para hacer sistemas web no es una elección muy acertada.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #6 (permalink)  
Antiguo 27/12/2014, 09:11
 
Fecha de Ingreso: octubre-2006
Mensajes: 267
Antigüedad: 17 años, 6 meses
Puntos: 6
Respuesta: ¿Como hacer los modelos?

Hola NSD:

Muchas gracias. Despejaste la duda que tenía con respecto al criterio a seguir para crear modelos. Te dejé un punto por tu respuesta.

Sin embargo, me creas una duda al decir que para las aplicaciones web no es acertado utilizar una estructura MVC. Ojalá puedas explicarnos eso también. Saludos.
  #7 (permalink)  
Antiguo 27/12/2014, 10:07
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 11 años, 11 meses
Puntos: 320
Respuesta: ¿Como hacer los modelos?

Cita:
Iniciado por metalfox6383 Ver Mensaje
Sin embargo, me creas una duda al decir que para las aplicaciones web no es acertado utilizar una estructura MVC. Ojalá puedas explicarnos eso también. Saludos.
La web tiene una estructura Request-Response, un cliente solicita un recurso que tiene nombre y apellido (la url) por algún medio disponible (GET, HEAD, POST, PUT, DELETE, TRACE) pasandole opcionalmente algunos parámetros y espera que el servidor le retorne los datos en un formato especifico.

La "Vista" no es una parte del sistema, la vista es externa, la tiene el cliente, la vista es el navegador o lo que sea que halla del otro lado.

Sin vista, no hay controlador, no al menos con el mismo concepto que lo hay en MVC.

Y, si lo único que hago es responder una solicitud ¿Para que necesito un modelo? si puedo programar para cada tipo de solicitud un script independiente y funcionaria extremadamente rápido.

¿Como plantear un sistema web entonces?
Los requerimientos funcionales son las urls.
Lo que en MVC era el controlador, metido en el medio del sistema, acá son los links y son un extremo del sistema.
Ahí entra a jugar el concepto de Router (Ruteador) que veras en casi cualquier FW, de alguna forma hay que mapear las urls a un procedimiento que las resuelva.
La forma en que se realice dicho mapeo, te proporciona una estructura de trabajo.

Estos procedimientos, dijimos que son independientes unos de otros, pero sin duda habrá partes comunes entre algunos de ellos, esas partes comunes pueden ser extraídas de los procedimientos principales y ser organizadas en un modelo de objetos.
Este modelo tiene un gran diferencia con el concepto de "modelo" que tiene MVC, el modelo aquí es todo lo que se usa en mas de un lugar y que por lo tanto debe ser separado para evitar código duplicado.
Como normalmente lo que se utiliza en todos lados es la base de datos, entra a jugar el concepto de DBAL (Capa de abstracción de la base de datos) que suele automatizar gran parte del problema.
Recuerdo que no hace mucho en este tema se hablo de eso. Aun tengo pendiente una respuesta alli, pero no he investigado y probado aun todo lo que menciona @hhs.

¿Y que hay de la vista? ¿Donde va el html, el json, el xml?
Ahí entra a jugar el concepto de template (plantilla).

Si intentas poner esto a prueba, veras que es mucho mas sencillo que MVC, donde en MVC necesitas 3 clases + 4 interfaces, de esta forma solo necesitas 1 clase (o un archivo con funciones, depende el enfoque que uses) y ademas, esta clase es mucho mas pequeña que las del MVC.

Si te interesa el tema, ya habia hablado de esto antes en otro tema de este foro: http://www.forosdelweb.com/f14/si-co...4/#post4626767 quizás encuentre interesante el hilo ya que hay otras opiniones ademas de la mía que vale la pena leer, ademas de citar a algunos artículos externos sobre el tema.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #8 (permalink)  
Antiguo 03/01/2015, 09:49
 
Fecha de Ingreso: octubre-2006
Mensajes: 267
Antigüedad: 17 años, 6 meses
Puntos: 6
Respuesta: ¿Como hacer los modelos?

Muchas gracias. Es buena la información que nos compartes. He tenido que leer un par de veces tu comentario para comprendelo y me ha animado a buscar más conceptos que desconozco. Gracias por los enlaces. Saludos.

Etiquetas: tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:25.