Предпочтительный способ сделать это - использовать Шлюз табличных данных . Вместо
$this->db->insert('countries', $data);
вы создаете классы для каждой таблицы в вашей базе данных. Каждая таблица инкапсулирует логику CRUD в класс, например,
class Countries
{
$protected $_db;
public function __construct($db)
{
$this->_db = $db;
}
public function save(array $countries)
{
$this->db->insert('countries', $countries);
}
// ... other methods
}
Кроме того, я предлагаю использовать транзакций для такого рода работы, потому что все эти вещи принадлежат друг другу, и вы, вероятно, не захотите вставлять какие-либо данные, если один из запросов завершится неудачно. Я не знаю, как CodeIgnitor обрабатывает транзакции, но в основном вы должны сделать это следующим образом:
$this->db->startTransaction(); // like try/catch for databases
$countries = new Countries($this->db);
$countries->save($countryData);
$links = new Links($this->db);
$links->save($linkData);
// ...
if($this->db->commit() === false) { // returns true when no errors occured
$this->db->rollback(); // undos in case something went wrong
}
Хотя это не отвечает на ваш вопрос о том, как динамически вызывать функцию (call_user_func()
может сделать это), выполнение этого, как предложено выше, делает ваш код гораздо более понятным.
Ваш вопрос немного расплывчат в том, хотите ли вы запускать все функции в последовательности или просто хотите обмениваться в зависимости от того, что отправил пользователь. Для первого случая используйте транзакционный подход. Во втором случае вы просто создадите экземпляр соответствующего класса и вызовете метод save.