получить имя категории из одной таблицы, где id = c_Id в другой таблице - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь написать простой блог, чтобы получить опыт работы с php.В блоге есть не только сообщения, но и категории, к которым может принадлежать сообщение.(пост с заголовком "lorem ipsum" имеет категорию 1, что является ужасом для, например) есть еще две таблицы, но для этого они не нужны.

table: posts                      table: categories
id = 1*                           category = Fantasy
c_Id = 2**                        id = 2*
title = hello world
subheading = greeting the world
content = hello.

Когда я нажимаю на категорию "Фэнтези" в моем блоге, она должна получить все сообщения с категорией, на которую я нажал.У меня есть самодельный фреймворк с CategoryRepository, в котором я взаимодействую с базой данных, и PostsController, который имеет функции для отображения сайтов в моем блоге.

Когда я нажимаю на категорию, она приводит меня к этому URL («ужас» представляет разные категории):

http://localhost:8888/blog/public/index.php/categories/Horror

У меня есть эта функцияв моем PostsController, в котором я пытаюсь получить имя категории из URL-адреса (мне не удалось получить его с сеансом / POST, даже если мне нужно динамическое имя категории, и я строго хочу, чтобы имя категории и не идентификатор категории в URL-адресе.)

public function categoryOverview() {
  $url = 'http://localhost:8888/blog/public/index.php/categories/Horror';
  $endOfUrl = basename($url);

  if($endOfUrl == "Horror") {
    $categoryName = "Horror";
  } 

  $categories = $this->categoryRepository->allCategories();

  $idFromCategory = $this->categoryRepository->idFromCategory($categoryName); 

  $this->render("cats/categoryOverview", [
    'id' => $idFromCategory,
  'categories' => $categories,
  ]);
}

ОБНОВЛЕНИЕ: Мне удалось динамически получить конец URL-адреса (вероятно, уродливый код, но этоработал как минимум):

public function categoryOverview() {
  $url = $_SERVER['REQUEST_URI']; 
  $categoryName = basename($url);

  $categories = $this->categoryRepository->allCategories(); 

  $idFromCategory = $this->categoryRepository- 
  >getPostFromCategory($categoryName); 

  $this->render("cats/categoryOverview", [
    'id' => $idFromCategory,
    'categories' => $categories,
  ]);
}

UDAPTE END

И это idFromCategory () в CategoryRepository, который должен получить идентификатор и категорию из категории, котораяв URL, который я нажимал:

public function idFromCategory($categoryName) {
  $table = $this->getTableName();
  $model = $this->getModelName();

  $stmt = $this->pdo->prepare(
  "SELECT * FROM `$table` WHERE category = :category");
  $stmt->execute(['category' => $categoryName]);

  $stmt->setFetchMode(PDO::FETCH_CLASS, $model);
  $idFromCategory = $stmt->fetch(PDO::FETCH_CLASS);

  var_dump($idFromCategory);

  return $idFromCategory;
 }
  1. Могу ли я сделать это с помощью сеанса?Категории, по которым можно щелкнуть, находятся в заголовке на панели навигации, я пролистываю категории в таблице с foreach, чтобы поместить их в меню, это отлично работает.Но когда я помещаю $ _SESSION ['categoryID'] = $ category-> category;Я бы всегда получал ID последних категорий.

  2. Должен быть более простой способ, чем то, что я пытаюсь сделать, но как?

  3. Не знаю, почему, но я просто не могу получить список всех постов одной категории, когда нажимаю на категорию, хотя это звучит так просто.

Я надеюсь, что кто-нибудь понимает, что я пишу здесь: D Я действительно только начинаю программировать на php, поэтому я очень надеюсь, что кто-то может помочь мне с этим;даже если он просто говорит, что мой код ужасен.

Заранее спасибо:)

1 Ответ

0 голосов
/ 28 ноября 2018

Вы можете использовать объединение, чтобы получить все сообщения, относящиеся к категории

   SELECT posts.*, categories.* FROM posts 
   INNER JOIN categories ON posts.c_id = categories.id
   WHERE categories.category = :category
...