I'm starting with CodeIgniter and after several hours diving in Google I'm a bit confused.
Let's try to explain my question with a easy example: I have a table 'car' with the fields 'name' and 'color'. Therefore I want to have a php class Car, so that my code could look finally like this:
$car = new Car('BMW', 'red'); //new $car Object $car->save(); //this will make an SQL insert to the table 'car' //Lets query all cars $cars = Car::get_all(); //cars will be an array of Car objects, (not a set of rows!)
Therefore, I am looking for something pretty similar to what you have in RubyOnRails or Django (Python). I need to handle all kind of relationships, and to be able of write code in a true OOP+MVC way.
These are my failed approaches to get it:
Using an external ORM (DataMapper, Doctrine, AcidCrud...)
They either requires too many settings, or they handle relationships in a poor way.
Using CodeIgniter classes (to extend the CodeIgniter's Model class)
class Car extends Model{ public function Car($name='',$color='') { $this->name = $name; $this->color = $color; parent::Model(); } public function save() { $data = array( 'name' => $this->name , 'color' => $this->color ); $this->db->insert('cars' $data); }
And so on... Problem with this approach is that if a do a var_dump() of a $car object, I see that it contains a lot of stuff from the CodeIgniter, such as the objects CI_Config, CI_Input, CI_Benchmark, etc. Therefore I think this is not a good solution, because each object of my class Car, it will contain a lot of repeated data, (it will have a poor performance!), isn't it?
Not using the CodeIgniter's models
I could make my models without extending them from CodeIgniter's Model class, and then using the regular PHP5 constructor (__construct() instead of function Car()), but problem in this case is: how I access to the $db object to make querys using the CodeIgniter's ActiveRecord? and, how I load the models (its classes) within the controllers?
Gas ORM. A lightweight and easy-to-use ORM for CodeIgniter. Gas was built specifically for CodeIgniter app. It uses CodeIgniter Database packages, a powerful DBAL which support numerous DB drivers.
$config['log_path'] = 'another/directory/logs/'; CI will then create the log file in the directory. monitor the log files as you like. You can get the debug message to see if your model is already loaded or not in the log files.
In CodeIgniter Model are the PHP classes where all database related manipulation is done e.g. fetching records, insert, update, and delete records. Within this, all data processing logic is done. All model files are managed in application/models directory and they are load and access by the controller.
You probably want something like this:
class Cars { //List all neccessary vars here function __construct() { //get instance of Codeigniter Object and load database library $this->obj =& get_instance(); $this->obj->load->database(); } //You can now list methods like so: function selectCar($name, $color) { $this->obj->db->select('color')->from('car')->where('color', $color); $query = $this->obj->db->get(); switch ($query->num_rows()) { case 0: return false; break; default: return $query->result(); break; } }
Hope that helps!
Try with Doctrine, is a great ORM and can be easily integrated in CodeIgniter.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With