CodeIgniter: проблема с переменной, отправленной в модель - PullRequest
0 голосов
/ 01 марта 2011

Я наследую чужой проект и пытаюсь с ним ознакомиться.У меня мало опыта с КИ.

В одном из представлений есть раскрывающаяся форма, при изменении вызывает функцию JS:

$(document).ready(function()
{
    // admin contorller drop down ajax
    $("#catagoryDropDownList").change(function()
    {
        getCatagoriesItems();
    });

    // initiate table sort
    TableSorter.prepareTable($("#dataResultsTable"));
});

// ajax request triggered by catagory drop down menu selection
function getCatagoriesItems()
{

    blockPage();

    // get base url of current site
    var baseurl = $("#site_url_for_ajax").val();

    // get adminType
    var adminType = $("#admin_type").val();

    // get catagory id
    var catId = $("#catagoryDropDownList option:selected").attr("id");

    var queryString = baseurl + "home/ajaxCatagorySelection/" + catId + "/" + adminType;

    $.get(queryString, function(data)
    {
        var obj = jQuery.parseJSON(data);

        // dump data into table when request is successful
        $("#dataResultsTable tbody").html(JSONParser.parseHomeDropDownSelectedJSON(obj));

        // unblock page when done
        $.unblockUI();
    });
}

Я зарегистрировал два значения, catID и adminType, они обацелые числа, catID будет между 1-10 и adminType = 1. Там обе ссылки на значения int в базе данных.catID ссылается на поле с названием «categoryID».catID 6 = все.Ни одна из записей в базе данных не имеет 6 в качестве значения, таким образом, гарантируя, что если вы отфильтровали, что не равно 6, вы получите все.Они передаются функции ajaxCatagorySelection в файле контроллера home.php.Все идет нормально.Вот эта функция:

public function ajaxCatagorySelection($tableName, $id)
    {
        $vars = new DatabaseRetriever($id);

        $resultsArray = $vars->getDataForSpecifiedTable($tableName, $id);

        echo json_encode($resultsArray);
    }

, и сама эта функция ссылается на модель (database_retriever.php) и класс DatabaseRetriever, и я предполагаю передачу переменных в функцию getDataForSpecifiedTable.Я говорю, предполагая, потому что имена переменных значительно изменились с catID на $ tableName и adminType на $ id.Вот getDataForSpecifiedTable:

public function getDataForSpecifiedTable($catagoryInfo, $databaseID)
    {


        // connect to database
        $sql = $this->connect($databaseID);

        if ($catagoryInfo != 6) { 
            // build SQL Query and query the database
            $result = $sql->query("SELECT fileId, fileTitle, filePath, fileTypeExt, fileDescription, fileModed from admin_files where catagoryId = '" . $catagoryInfo . "' and adminId = '" . $databaseID . "'");
        } else { 
            $result = $sql->query("SELECT fileId, fileTitle, filePath, fileTypeExt, fileDescription, fileModed from admin_files where catagoryId = '" . $catagoryInfo . "' and adminId = '" . $databaseID . "'");
        }


        // declare array
        $items = array();

        // retriever rows from database and build array
        while ($row = $result->fetch_row())
        {
            array_push($items, $row);
        }

        // disconnect from database
        $this->disconnect();

        // return data in array
        return $items;
    }

имена переменных снова изменились, но вы можете сказать, что они должны делать то, что я написал выше, посмотрев на запрос.Здесь проблема.Я добавил условное выражение «if ($ catagoryInfo! = 6) ...», если я не добавлю туда else, то CI выдает ошибки предупреждения, что данные не возвращаются.Я возвращаю $ categoryInfo и в консоли FireBug получаю правильное целое число.Я пробовал условное выражение как целое число и строку с ошибками.Есть идеи, что здесь может происходить?

1 Ответ

2 голосов
/ 01 марта 2011

Если database_retriever.php - модель, вы должны назвать ее так:

$this->load->model('database_retriever');
$resultsArray = $this->Database_retriever->getDataForSpecifiedTable($tableName, $id);

Также убедитесь, что ваша модель extends Model (или extends CI_Model в CodeIgniter 2).

ПРИМЕЧАНИЕ: $.getJSON, автоматически проанализирует JSON для вас, поэтому вам не нужно звонить parseJSON.

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