Контроллер передает только первый аргумент в Model - PullRequest
0 голосов
/ 28 июня 2018

Привет, люди из stackoverflow.com, это мой первый вопрос, будьте осторожны :).

Так же, как и в вопросе, мой контроллер отправляет только первый аргумент из 4. Если я заменю позиции аргументов, он снова отправит только первый. Это предназначено для поиска, если это важно. В любом случае это код:

Контроллер:

public function groups($question = NULL, $city = NULL , $country = NULL, $area = NULL){

if ($question == NULL && $city == NULL && $country == NULL && $area == NULL) {
    $groups = $this->ModelSt->getGroups();

} else {
    $groups = $this->ModelSt->search($question, $city , $country, $area);
}

$data['groups'] = $groups;
$data['controller'] = "UserSt";
$data['method']= "search";
$this->loadView($data, "groups.php");

}

public function search() {
$question  = $this->input->get('question');
$city      = $this->input->get('city');
$country   = $this->input->get('country');
$area      = $this->input->get('area');
$this->groups($question, $city, $country, $area);

}

ModelSt:

public function search($question, $city , $country, $area) {
$query = "SELECT * FROM `group` WHERE `status`='1' ";

if($question && !empty($question)){
    $query .= " AND (`name` LIKE '%".$question."%' OR `desc` LIKE '%".$question."%')";
}
if($city && !empty($city)){
    $query .= " AND (`city` LIKE '".$city."')";
}
if($country && !empty($country)){
    $query .= " AND (`country` LIKE '".$country."')";
}
if($area && !empty($area)) {
    $query .= " AND (`area` LIKE '". $area ."')";
}

$result = $this->db->query($query);
$result = $result->result_array();
return $result;

}

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Хорошо, через некоторое время, не затрагивая ничего в коде, переменные 1,3 и 4 передаются в Model, но переменная 2 не будет. Ничего не трогал, просто начал работать. На днях то же самое произошло с библиотекой Codeigniter "upload", она не работала в течение 40 минут, а потом начала работать без всякой причины ... Я думаю, мне придется ждать, пока переменная $ city будет пройдена. Спасибо за ответ!

0 голосов
/ 28 июня 2018

Отправить параметры в виде массива следующим образом:

$this->ModelSt->search(
    array(
        'question' => $question,
        'country' => $country,
        'city' => $city,
        'area' => $area
    )
);

Ваша модель:

public function search($post)
{
    $question = isset($post['question']) && !is_null($post['question']) && !empty($post['question']) ? $post['question'] : NULL;
    $city = isset($post['city']) && !is_null($post['city']) && !empty($post['city']) ? $post['city'] : NULL;
    $country = isset($post['country']) && !is_null($post['country']) && !empty($post['country']) ? $post['country'] : NULL;
    $area = isset($post['area']) && !is_null($post['area']) && !empty($post['area']) ? $post['area'] : NULL;


    $this->db->select('name, city, country, area');
    $this->db->from('group');
    $this->db->where('status', 1);
    $this->db->group_start();

    /**
     * Question is not null
     */
    if($question != NULL)
    {
        $this->db->group_start();
        $this->db->like('name', $question);
        $this->db->or_like('desc', $question);
        $this->db->group_end();
    }

    /**
     * City is not null
     */
    if($city != NULL)
        $this->db->like('city', $city);

    /**
     * Country is not null
     */
    if($country != NULL)
        $this->db->like('country', $country);

    /**
     * Area is not null
     */
    if($area != NULL)
        $this->db->like('area', $area);

    $this->db->group_end();
    $this->db->order_by('name', 'asc');
    return $this->db->get()->result();
}
...