2

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

所以换句话说,我想要完成的是: category = General AND (status = published OR status = scheduled)

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

$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 的全部原因是为了更轻松地处理关系,所以我认为我不必为了嵌套或有条件的!我也意识到我可以使用子查询,但同样,我认为它不应该那么复杂。

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

4

1 回答 1

1

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

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

于 2012-01-28T15:40:15.963 回答