Мне нужно вызвать функцию контроллера внутри представления -Codeigniter

1

Мне нужно вызвать функцию из представления для эхо значения. Я использую следующий код,

Контроллер (test_controller)

public function displayCategory()
    {
        $this->load->model('Model_test');

        $data['categories'] = $this->Model_test->getCategories();

        $this->load->view('test_view', $data);
    }

public function display($id)
    {
        $this->load->model('Model_test');
        $name= $this->Model_test->getName($id);
        return $name;
    }

Модель (Model_test)

function getCategories() {
        $query = $this->db->query("SELECT * FROM category");
        if ($query->num_rows() > 0) {
            return $query->result();
        } else {
            return NULL;
        }
    }

function getName($userId) {
        $query = $this->db->query("SELECT name FROM user where id = '$userId' ");
        if ($query->num_rows() > 0) {
            return $query->row()->name;
        } else {
            return NULL;
        }
    }

Посмотреть

<div id="body">

        <?php                
            foreach ($categories as $object) {
                $temp = $this->test_controller->display($object->id);
                echo $object->title . "&nbsp;&nbsp;". $object->no . $temp . '<br/>';
            }
        ?>

</div>

но некоторая ошибка при запуске кода.

error Сообщение: Неопределенное свойство: CI_Loader :: $ test_controller in view

  • 0
    Покажите нам, как вы получаете массив $categories Categories.
  • 0
    @Kyslik отредактировано .. я добавил код внутри функции displayCategory ()
Показать ещё 2 комментария
Теги:
codeigniter

1 ответ

0
Лучший ответ

Я не уверен, что вы используете CodeIgniter 2 или 3.

Во всяком случае, в основном вы не хотите использовать что-либо внутри файлов "Просмотр", кроме, возможно, вспомогательной функции или какого-либо слоя "презентатора" (который должен быть вызван внутри контроллера, я думаю).


Решение с использованием Join

Перейдите и прочитайте эту страницу руководства и выполните поиск соединения. Там вы можете узнать о реализации директивы SQL join.

Вы хотите изменить эту getCategories() (getCategories()), чтобы она возвращала getCategories() данные

function getCategories() {

   $this->db->select('category.title, category.no, user.name as username')
            ->from('category')
            ->join('user', 'user.id = category.id');
   $query = $this->db->get();

   if ($query->num_rows() > 0) {
       return $query->result();
   } else {
       return NULL;
   }
}

и вы можете получить свое имя пользователя, как это

foreach ($categories as $object) {
    echo $object->title . "&nbsp;&nbsp;". $object->no . $object->username . '<br/>';
}

Я не уверен на 100%, поэтому, пожалуйста, опубликуйте комментарии. Я отредактирую этот ответ позже.


Решение "правила нарушения"

qaru.site/questions/208021/...


Общие замечания

Также рассмотрите назначение имен таблиц с помощью множественного числа, чтобы категории, пользователи...

Также неверно использовать "category.id как user.id" (сохранение идентификатора пользователя внутри таблицы категорий в поле "id"), вместо этого вы можете использовать либо сводную таблицу, либо в случае отношения 1:1 поля "user_id",,

Ещё вопросы

Сообщество Overcoder
Наверх
Меню