我在使用 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 语句的操作顺序应该以某种方式内置......