Передача аргументов и условий модели в codeigniter - PullRequest
0 голосов
/ 06 мая 2010

Я добавляю несколько моделей в проект, и мне было интересно, есть ли подход «наилучшей практики» для создания моделей:

Имеет ли смысл создавать функцию для каждого конкретного запроса?

Я начал это делать, затем пришла идея создать универсальную функцию, в которую я мог бы передавать параметры. например:

Вместо

function getClients(){
    return $this->db->query('SELECT client_id,last FROM Names ORDER BY id DESC');
    }
    function getClientNames($clid){
        return $this->db->query('SELECT * FROM Names WHERE client_id = '.$clid);
    }
    function getClientName($nameID){
        return $this->db->query('SELECT * FROM Names WHERE id ='.$nameID);
    }
}

Что-то вроде

function getNameData($args,$cond){
    if($cond==''){
        $q=$this->db->query('SELECT '.$args.' FROM Names');
        return $q;
    }else{
        $q=$this->db->query('SELECT '.$args.' FROM Names WHERE '.$cond);
        return $q;
    }
}

где я могу передать поля и условия (если применимо) модели. Есть ли причина, по которой последний пример был бы плохой идеей?

Спасибо!

1 Ответ

0 голосов
/ 08 мая 2010

Я думаю, что на самом деле было бы лучше использовать Active Record CI для компиляции запросов.

Пример:

function all_clients($select)
{
    $this->db->select($select);

    return $this->_get_client_data();
}

function single_client($select, $id = "")
{
    // validate $id

    $this->db->select($select);
    $this->db->where("id", $id);
    $this->db->limit(1);

    return $this->_get_client_data();
}

// Only called by a method above once the query parameters have been set.

private function _get_client_data()
{
    $q = $this->db->get("clients");

    if($q->num_rows() > 0)
    {
        return $q->result_array();
    }

    return FALSE;
}

Active Record CI делает все, что вы хотели, намного проще. Вы можете себе представить, как настроить ваши публичные функции для условной установки ряда опций перед тем, как вызвать $this->db->get().

Полагаю, вы бы назвали _get_client_data всеобъемлющим (?), А выполнение всего процесса извлечения данных с помощью одного метода значительно облегчает обслуживание таких вещей, как обработка ошибок.

ПРИМЕЧАНИЕ. Всегда не забывайте проверять данные, подобные этим. Я знаю, что вы делаете, но я просто повторяю это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...