CodeIgniter, модели и ORM, как иметь дело с этим?

Я запускаю с CodeIgniter и после нескольких часов, погружаясь в Google, я немного смущен.

Давайте попытаемся объяснить мой вопрос с легким примером: у Меня есть таблица 'автомобиль' с полями 'имя' и 'цвет'. Поэтому я хочу иметь php класс Автомобиль, так, чтобы мой код мог наконец походить на это:

$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!)

Поэтому я ищу что-то довольно подобное тому, что Вы имеете в RubyOnRails или Django (Python). Я должен обработать весь вид отношений, и смочь пишут код истинным способом OOP+MVC.

Это мои неудавшиеся подходы для получения его:

Используя внешний ORM (DataMapper, Доктрина, AcidCrud...)

Они или требуют слишком многих настроек, или они обрабатывают отношения плохим способом.

Используя классы CodeIgniter (для расширения Образцового класса CodeIgniter)

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);
}

И так далее... Проблема с этим подходом состоит в том, что, если var_dump () объекта $car, я вижу, что он содержит много материала от CodeIgniter, такого как объекты CI_Config, CI_Input, CI_Benchmark, и т.д. Поэтому, я думаю, что это не хорошее решение, потому что каждый объект моего класса Автомобиль, он будет содержать много повторных данных, (он будет иметь низкую производительность!), не так ли?

Не используя модели CodeIgniter

Я мог сделать свои модели, не расширяя их от Образцового класса CodeIgniter, и затем с помощью постоянного конструктора PHP5 (__ конструкция () вместо функционального Автомобиля ()), но проблема в этом случае: как я получаю доступ к объекту $db сделать запросы с помощью ActiveRecord CodeIgniter? и, как я загружаю модели (его классы) в контроллерах?

37
задан j0k 15 December 2012 в 16:53
поделиться

4 ответа

Вы, вероятно, хотите что-то подобное:

   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;
        }
    }

надеюсь, что Помогает!

14
ответ дан 27 November 2019 в 05:01
поделиться

взгляните на страницу вики-программиста для ORM

http://codeigniter.com/wiki/ORM/

4
ответ дан 27 November 2019 в 05:01
поделиться

Попробуйте использовать Doctrine , это отличный ORM, который легко интегрируется в CodeIgniter.

9
ответ дан 27 November 2019 в 05:01
поделиться

Мне повезло с использованием Propel с codeigniter.

2
ответ дан 27 November 2019 в 05:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: