2009-07-19 38 views
14

estoy usando el siguiente código para inicializar un modelo de dentro de mi controlador:PHP y Codeigniter: ¿cómo pasar parámetros a un modelo?

$this->load->model('model_name'); 

¿Es posible modificar la línea por encima de alguna manera para que el modelo constructor recieves un parámetro? Quiero usar el siguiente código en el modelo constructor:

function __construct($param_var) { 
    parent::Model(); 

    $this->$param_var = $param_var; //I'm not even sure this works in PHP..but different issue 
} 

Esto sería muy útil para que pueda volver a utilizar mis clases del modelo. Gracias.

ACTUALIZACIÓN: (a partir de una de las respuestas, mi pregunta original es solved..thanks) Sólo para explicar por qué quería hacer esto: la idea es poder reutilizar una clase del modelo. Así que, básicamente, para dar un ejemplo simple me gustaría poder pasar una variable "order_by" a la clase de modelo para que pueda reutilizar la lógica en la clase de modelo (y cambiar dinámicamente el valor de la orden en el sql) sin tener para crear una clase separada o una función separada.

¿Es este diseño pobre? Si es así, ¿podría explicar por qué no haría algo como esto y cómo lo haría en su lugar?

+0

Tengo curiosidad de por qué usted quiere pasar un parámetro al constructor de su modelo. Supongo que necesitas una biblioteca en lugar de un modelo. – Randell

+1

Acabo de actualizar mi pregunta con una explicación de por qué haría esto – oym

Respuesta

3

Veo su razonamiento para esto, pero puedo sugerir que mire Object-Relational Mapping para las necesidades de su base de datos. Hay una biblioteca ORM creada por el usuario para CodeIgniter llamada DataMapper que he estado usando últimamente. Puede usar tablas en sus controladores como objetos, y puede ser una mejor opción para su problema.

+0

gracias por la referencia, pero creo que esto podría ser excesivo ... Sé que no di mucha descripción de mi aplicación, pero ¿cuándo recomendaría usar esta biblioteca ORM? ¿La aplicación no tendría que ser muy intensiva en datos (en términos de acceso a db) para evitar esto? – oym

+0

En cierto modo, me gusta usarlo porque conduce a menos código si su aplicación requiere un poco de datos, pero a menos que su base de datos sea realmente pequeña, puede ser un poco exagerado. – Domenic

20

No puede pasar parámetros a través de la función load. Vas a tener que hacer algo como:

$this->load->model('model_name'); 
$this->model_name->my_constructor('stuff'); 

En el modelo:

function my_constructor($param_var) { 
... 
} 

de respuesta a la actualización:

Se podía pasar el valor order_by cuando se está llamando a su función de modelo . Supongo que en la acción de su controlador, tiene algo como $this->model_name->get($my_id); Simplemente agregue su parámetro order_by a esta función. IMO esto hace que la lógica de su modelo sea más flexible/reutilizable porque de la forma en que lo estaba haciendo, supongo que al establecer order_by en el constructor se establecerá el valor order_by para cada función.

+1

Gracias y no olvides que puedes establecer los valores predeterminados $ param_var = true también en la función del modelo. – svandragt

+0

Ahora puede, consulte esta [respuesta] (http://stackoverflow.com/a/10655252/1027550) – MRodrigues

Cuestiones relacionadas