Вы используете codeigniter для этой разработки? Этот ответ ниже основан на
фреймворк веб-приложения от codeigniter. Итак,
Проблема в том, что я хочу, чтобы страница [root]->fruits->tropical->bananas
быть доступным только из этого URL:
http://localhost/cms/fruits/tropical/bananas/
.
Итак, создать функцию в вашем контроллере с именем функции fruits и с двумя параметрами? Например
class Cms extends CI_Controller {
...
...
...
public function __construct() {
$this->load->model('cms_model');
}
public function fruits($tropical, $bananas) {
$string = $this->cms_model->getPage($tropical, $bananas);
// load the view you want.
$this->load->view('');
}
...
...
...
}
До сих пор я придумал, что таблица cms имеет родительское поле
это указывает на его родителя. Вопрос в том, как разобрать адрес
и выбрать строку из БД с минимальным количеством запросов / максимально эффективно?
Table cms:
Id
Slug
ParentId
Table cms_parent:
Id
Давайте опишем на примере двух приведенных выше таблиц: таблицу cms и родительскую таблицу cms. Вы не указали точно в своем вопросе о том, что хочет ваш запрос или результат запроса. Ниже приведено мое предположение, основанное на описании вашего вопроса: запросите две таблицы, соединив их с помощью общего ключа, а затем примените условие где.
// select * from cms t1 join cms_parent t2 on t1.ParentId = t2.Id where t1.Id = '' and t2.ParentId = 'level1';
public function getPage($level0, $level1) {
$this->db->select('*');
$this->db->from('cms');
$this->db->join('cms_parent', 'cms.ParentId = cms_parent.Id');
$this->db->where('cms.Id', $level0);
$this->db->where('cms.ParentId', $level1);
$query = $this->db->get();
// return one row from database.
return $query->row();
}