Могу ли я использовать одну модель CodeIgniter для нескольких таблиц? - PullRequest
0 голосов
/ 24 января 2020

У меня есть база данных для спортивного мероприятия с несколькими таблицами. Некоторые из таблиц содержат записи для результатов, есть таблица профилей пользователей, а также несколько разных таблиц.

Моя модель выглядит следующим образом:

class Results extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
    }

    public function displayrecords($table) {
        $query=$this->db->query("select * from " . $table);
        return $query->result();
    }

    public function getdisplayname($table) {
        $query=$this->db->query("select * from " . $table);
        return $query->result();
    }

    public function updatetable() {

    }

    public function deleterecords($table, $id) {
        $this->db->query("delete * from " . $table . " where id='" . $id . "'");
    }
}

И контроллер для представления индекса:

public function index() {
    // Load the models
    $this->load->model('Results');
    $this->load->model('Info');
    $this->load->model('TableNames');

    // Create the array to store the data for the index page
    $data['results'] = array();

    // Get a list of all the tables in the event database
    $tables = $this->db->list_tables();
    $data['tables'] = array();

    // Loop through the list of table names and extract the results tables
    foreach($tables as $table) {
        if (strpos($table, "rs_") === 0) {
            array_push($data['tables'], $table);
            $temp = $this->Results->displayrecords($table);
            array_push($data['results'], $temp);
            $data['headnames'] = $this->db->list_fields($table);
        }
    }

    // Get the event info data and the list of Human Readable Table Names
    $data['tablenames'] = $this->TableNames->getnames();
    $data['eventinfo'] = $this->Info->getinfo();

    // Render the templates
    $this->parser->parse('templates/index_header', $data);
    $this->parser->parse('pages/index', $data);
    $this->parser->parse('templates/footer', $data);
}

Я пытаюсь выяснить, целесообразно ли использовать одну модель CodeIgniter со всеми таблицами результатов. Пример таблиц результатов: 10 лучших мужчин в возрасте от 30 до 39 лет для соревнований на 21 км и 10 лучших мужчин в возрасте от 40 до 49 лет также для соревнований на 21 км. В настоящее время у меня есть все таблицы результатов, использующие те же методы Models, как:

public function displayrecords($table) {
    $query=$this->db->query("select * from " . $table);
    return $query->result();
}

, который принимает таблицу результатов в качестве параметра и отображает результаты. Я хотел бы создать модели для каждой из таблиц результатов, но я не знаю заранее, какое имя будет иметь таблица, столбцы будут иметь значение c. Каждая таблица результатов создается администратором через веб-страницу и при необходимости добавляется в базу данных. Каждая таблица будет иметь одинаковые операции над ними, удалять строки, обновлять строки. Вот почему я подумал, что было бы лучше иметь одну модель, которая может работать со всеми таблицами.

Я не уверен, что мой подход к этому верен, хотя, похоже, у меня уже есть мало проблем. Например, при попытке удалить запись из таблицы я могу получить идентификатор строки, которую необходимо удалить, но я не уверен, как получить имя таблицы базы данных, так как для метода deleterecords потребуется 2 параметра, $ id и $ tablename для корректного удаления записи. Метод модели таков:

public function deleterecords($tablename, $id) {
    $this->db->query("delete from " . $tablename . " where id='" . $id . "'");
}

и затем в представлении я отображаю каждую таблицу результатов:

foreach ($table as $row) {
    echo "<tr id='result_" . $row->id . "'>";
    echo "<td>" . $row->Place . "</td>";
    echo "<td class='bibcell'>" . $row->BibNumber . "<a class='editbut' href=''><img class='bibnum' src='" . base_url() . "assets/images/editicon.png' width='80' style='padding-left: 20px;'></a><a class='delbut' href='deletedata?id=" . $row->id . "'><img src='" . base_url() . "assets/images/deleteicon.png' width='75' style='padding-left: 5px;'></a></td>";
    echo "<td>" . $row->Name . "</td>";
    echo "<td>" . $row->Age . "</td>";
    echo "<td>" . $row->Club . "</td>";
    echo "<td>" . $row->Time . "</td>";
    echo "<td><select class='user-options'><option value='pending' style='background: red;'>Pending</option><option value='checked' style='background: green;'>Checked</option></select></td>";
    echo "</tr>";
}

Будет ли использование скрытого ввода способом получить имя таблицы есть ли в CodeIgniter функции, которые бы обрабатывали использование нескольких таблиц с одной моделью?

РЕДАКТИРОВАТЬ:

Мне удалось выяснить это:

echo "<td class='bibcell'>" . $row->BibNumber . "<a class='editbut' href=''><img class='bibnum' src='" . base_url() . "assets/images/editicon.png' width='80' style='padding-left: 20px;'></a><a class='delbut' href='deletedata?id=" . $row->id . "&tablename=" . $tables[$i] . "'><img src='" . base_url() . "assets/images/deleteicon.png' width='75' style='padding-left: 5px;'></a></td>";

для передачи Идентификатор и имя таблицы для метода Model будут удалены, но я получаю неопределенную переменную tablename. Я вижу, что переменная tablename находится в URL, хотя.

http://localhost/results/pages/deletedata?id=1&tablename=rs_toptenfemale
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...