如何在Codeigniter的Datamapper ORM中嵌套WHERE参数?

时间:2012-01-27 21:51:40

标签: php mysql codeigniter codeigniter-datamapper

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

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

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

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

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

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

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

...接下来是一些更复杂的JOIN语句,但我使用Datamapper的全部原因是为了更容易地处理关系,所以我认为我不应该在原始SQL中编写这一切。嵌套OR条件!我也意识到我可以使用子查询,但同样,我认为它不应该那么复杂。

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

1 个答案:

答案 0 :(得分:1)

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

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