关于 php:如何在 Datamapper ORM 中为 Codeigniter 嵌套 WHERE 参数?

How to nest WHERE params in Datamapper ORM for Codeigniter?

我在使用 Datamapper ORM for Codeigniter 时遇到了特定查询问题。我的数据模型设置为有博客文章,每篇文章都有许多类别、用户和标签。我想获取与特定类别、用户或标签相关但状态为"已发布"或"已计划"的博客文章。

也就是说,我想要完成的是:
category = General AND (status = published OR status = scheduled)

在 Datamapper ORM 中,我尝试了以下语法(假设我想要名称为 \\'General\\' 的类别中的帖子):

1
2
3
4
$posts->where_related('category', 'name', 'General')
      ->where('status', 'published')
      ->or_where('status', 'scheduled')
      ->get();

但是,这会导致获得以下帖子:(status = published AND category = General) OR status = scheduled。改变语句的顺序也无济于事。我似乎无法弄清楚是否有用于在括号中嵌套 OR 条件的 Datamapper 语法。

我意识到我可以用原始 SQL 编写查询,例如:

SELECT * FROM posts WHERE (status ="published" OR status ="scheduled) AND ...

...后面是一些更复杂的 JOIN 语句,但我使用 Datamapper 的全部原因是为了更轻松地处理关系,所以我认为我不应该用原始的方式写出这整件事SQL 只是为了嵌套一个 OR 条件!我也意识到我可以使用子查询,但我不认为它应该那么复杂。

我有什么遗漏吗?某种方式来组织这个查询,以便我可以使用 Datamapper 的语法来完成它?似乎能够指定 AND/OR 语句的操作顺序应该以某种方式内置......


如果您的 where 子句需要括号,则需要添加它们。

有关一些示例,请参见 http://datamapper.wanwizard.eu/pages/get.html#Query.Grouping。