从一个表中获得类别名称,其中另一个表中的id = c_Id

时间:2018-11-28 09:13:02

标签: php database blogs

我正在尝试编写一个简单的博客,以获取有关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。

当我单击一个类别时,它将带我到该网址(“恐怖”代表不同的类别):

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

我在PostsController中具有此功能,在该功能中,我试图从url中获取类别名称(即使我需要动态的类别名称,我也无法通过会话/ POST来获取它。严格要求类别名称,而不是网址中的类别ID。)

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,
  ]);
}

更新: 我设法动态获得了网址的结尾(可能是一个丑陋的代码,但至少可以正常工作):

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

这是CategoryRepository中的idFromCategory(),它应该从URL中的类别(也就是我单击的on)中获取ID和类别:

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 :(得分:0)

您可以使用联接获取与某个类别相关的所有帖子

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