views:

2546

answers:

2

I am using the following code to initialize a model from within my controller:

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

Is it possible to modify the above line somehow so that the model constructor recieves a parameter? I want to use the following code in the model constructor:

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

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

This would be very helpful so that I can reuse my model classes. Thanks.

UPDATE: (from one of the answers, my original question is solved..thanks!) Just to explain why I wanted to do this: the idea is to be able to reuse a model class. So basically to give a simple example I would like to be able to pass an "order_by" variable to the model class so that I can reuse the logic in the model class (and dynamically change the order-by value in the sql) without having to create a separate class or a separate function.

Is this poor design? If so could you please explain why you wouldn't do something like this and how you would do it instead?

+3  A: 

You can't pass parameters through the load function. You'll have to do something like:

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

In the model:

function my_constructor($param_var) {
...
}

Response to update:

You could just pass the order_by value when you're calling your model function. I'm assuming in your controller action, you have something like $this->model_name->get($my_id); Just add your order_by parameter to this function. IMO this makes your model logic more flexible/reusable because the way you were doing it, I assume setting order_by in the constructor will set the order_by value for every function.

jimyi
Thanks and don't forget you can set default values $param_var=true in the model function too.
Pacifika
+2  A: 

I see your reasoning for this, but may I suggest looking at Object-Relational Mapping for your database needs. There is a user-made ORM library for CodeIgniter called DataMapper that I've been using lately. You can use tables in your controllers as objects, and it may be a better fit for your problem.

Domenic
thanks for the reference, but I think this might be overkill..I know I didnt give much of a description of my application, but when would you recommend using this ORM library? Wouldn't the application have to be very data intensive (in terms of db access) to warrent this?
es11
In a way yes, I like to use it because it does lead to less code if your app is somewhat data intensive, but unless your db is really small it may be a bit overkill.
Domenic