gpt4 book ai didi

php - 如何在包含的 SQL 查询中使用 Twig 循环值

转载 作者:行者123 更新时间:2023-11-29 18:25:51 26 4
gpt4 key购买 nike

我正在尝试创建一个具有多个论坛类别的在线论坛。我已经对所有类别进行了概述,并且在每个类别的名称下,我想链接到提到的类别中的最新帖子,如下所示:

MY FORUM

Cool category
Latest post: Test thread by John Doe

Interesting category
Latest post: Another test thread by Jane Doe

Funny category
Latest post: Jokes thread by John Doe


因此,我进行了 SQL 查询来获取所有论坛类别:

$forumCategories = DB::run('SELECT * FROM forumCategories ORDER BY id ASC')->fetchAll();


并将其变成全局变量:

$twig->addGlobal('forumCategories', $forumCategories);


并创建了一个 for 循环来列出所有类别:

{% for category in forumCategories %}
<h3>{{category.title}}</h3>
{% endfor %}


到目前为止,一切顺利。

但现在,我想显示每个类别中的最新帖子。我想运行 SQL 查询并从表 forumPosts 中获取每个论坛类别的最新帖子,并将其显示在循环内。我需要显示forumPosts 中的一行,其中类别与循环中的category.id 相同。我该怎么做?

<小时/>

数据库结构和内容:

CREATE TABLE `forumCategories` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`urlTitle` varchar(255) NOT NULL,
`description` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `forumCategories` (`id`, `title`, `urlTitle`, `description`)
VALUES
(1,'Hovedrommet','hovedrommet','Dette er hovedrommet på Nye Dofo.'),
(2,'Forumleker','forumleker','Her kan man leke ulike forumleker.');

CREATE TABLE `forumPosts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
`urlTitle` varchar(255) NOT NULL,
`category` int(11) NOT NULL,
`content` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

INSERT INTO `forumPosts` (`id`, `title`, `urlTitle`, `category`, `content`)
VALUES
(1,'Test','test',1,'Dette er test1.'),
(2,'Test2','test2',1,'Dette er test2.'),
(3,'Test3','test3',2,'Dette er test3.'),
(4,'Test4','test4',2,'Dette er test4.');

我想要的输出是一个循环,其中包含所有类别的“标题”,以及每个类别中最新帖子(ID 最高的帖子)的“标题”。我设法获取类别名称,但无法获取最新帖子。

我想要以下输出:

霍夫德罗梅特
最新帖子:测试2

论坛客
最新帖子:测试4

最佳答案

在模板中包含查询通常不是最佳实践,因为目标应该是尽可能分离模型和 View 。

我将使用 Controller 收集 View 的数据,并以 View 可以消化的方式组织它,并将其直接传递给 View ,而不使用全局。

已编辑以供将来引用

例如,您可以使用 Tim Biegeleisen 提供的查询或类似的查询来收集数据:

SELECT p.id, p.title, p.urlTitle, c.title 
FROM (select * from forumPosts order by category, id DESC) p
JOIN forumCategories c ON c.id = p.category
GROUP BY p.category

http://sqlfiddle.com/#!9/e0d35/28

并将结果存储到变量中:

$forumCategories = DB::run($query)->fetchAll();

然后你可以将整个内容传递给模板,如下所示:

$this->render('template.twig', array('forumCategories' => $categories));

然后要在模板中访问它,您可以执行如下操作:

{% for category in forumCategories %}
<h3>{{category.categoryTitle}}</h3>
<h4><a href="path/to/article/{{ category.urlTitle }}">{{ category.title }}</a></h4>
{% endfor %}

关于php - 如何在包含的 SQL 查询中使用 Twig 循环值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46201083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com