Я пытаюсь создать простой форум в архитектуре MVC.
Это мой настройка базы данных (соответствующая часть):
Таблица: forum_categories
Подготовленный отчет в PHP MVC
`forum_categories` (
`cat_id` INT(8) NOT NULL AUTO_INCREMENT,
`cat_title` VARCHAR(255) NOT NULL,
`cat_desc` TEXT NOT NULL,
PRIMARY KEY (`cat_id`),
UNIQUE KEY (`cat_title`)
Таблица: forum_topics
`forum_topics` (
`topic_id` INT(8) NOT NULL AUTO_INCREMENT,
`cat_id` INT(8) NOT NULL COMMENT 'foreign key with forum_categories table',
`user_id` INT(11) NOT NULL COMMENT 'foreign key with users table',
`topic_title` VARCHAR(255) NOT NULL,
`topic_desc` TEXT NOT NULL,
`topic_date` DATETIME DEFAULT NULL,
PRIMARY KEY (`topic_id`),
FOREIGN KEY (`cat_id`) REFERENCES forum_categories (`cat_id`) ON DELETE CASCADE ON UPDATE CASCADE
Пример функциональности, я хотел бы для достижения:
Категория 1 имеет cat_id = 1
Категория 2 имеет cat_id = 2
Тема 1 имеет cat_id = 1
Тема 2 имеет cat_id = 2
Теперь, когда выбрана категория 1, я просто хочу тему 1, чтобы показать.
Если выбрана категория2, я просто хочу показать тему 2.
Это подготовленный оператор SQL добивается того, чтобы:
PREPARE stmnt FROM
'SELECT *
FROM forum_categories fc
JOIN forum_topics ft ON fc.cat_id = ft.cat_id
WHERE fc.cat_id = ?
ORDER BY ft.topic_date DESC';
SET @a = 1;
EXECUTE stmnt USING @a;
Мой Проблема: Я хотел бы переместить эту функцию в моей структуре PHP MVC.
Вот моя попытка, которая не работает (она показывает все темы во всех категориях).
Контроллер
/**
* Show all the topics in the chosen category
*/
public function showForumTopics()
{
$topic_model = $this->loadModel('Forum');
$this->view->forum_topics = $topic_model->getForumTopics();
$this->view->render('forum/viewTopics');
}
Модель
/**
* Gets an array that contains all the forum topics in the database.
* Each array element is an object, containing a specific topic's data.
* @return array All the forum topics
*/
public function getForumTopics($cat_id)
{
$sql = 'SELECT * FROM forum_categories fc JOIN forum_topics ft ON fc.cat_id = ft.cat_id WHERE fc.cat_id = :cat_id ORDER BY ft.topic_date DESC';
$query = $this->db->prepare($sql);
$query->execute(array(':cat_id' => $cat_id));
return $query->fetchAll();
}
Посмотреть
if ($this->forum_topics) {
foreach($this->forum_topics as $key => $value) {
echo '<p><strong>Title:</strong>' . $value->topic_title . '</p>';
echo '<p><strong>Description:</strong> ' . $value->topic_desc . '</p>';
echo '<p><strong>Author:</strong> ' . $value->topic_author . '</p>';
echo '<p><strong>Date:</strong> ' . $value->topic_date . '</p>';
}
} else {
echo 'No forum topics.';
}
Помощь будет высоко ценится! Спасибо!!
ли $ cat_id имеют значение, которое вы ожидаете, что это? –
Нет! Это моя проблема. Я хотел бы, чтобы значение $ cat_id было задано по какой категории я выбираю. – Schwesi
Как вы изменяете '$ cat_id'? – Elias