我在使用Codeigniter的Datamapper ORM进行特定查询时遇到问题。我的数据模型是这样设置的,这样我就有了博客文章,每个博客文章都有许多类别、用户和标记。我想获取与特定类别、用户或标记相关的博客文章,但也具有“已发布”或“已计划”状态
换句话说,我想完成的是: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 ...
…接下来是一些更复杂的连接语句,但是我使用Datamapper的全部原因是为了使处理关系更容易,所以我不认为为了嵌套一个或条件,我应该用原始SQL编写整个过程!我也意识到我可以使用子查询,但我不认为它应该那么复杂。
我有什么遗漏吗?如何组织此查询,以便我可以使用Datamapper的语法完成它?似乎能够指定和/或语句的操作顺序应该以某种方式内置。。。
最佳答案
如果where子句需要括号,则需要添加它们。
有关一些示例,请参见http://datamapper.wanwizard.eu/pages/get.html#Query.Grouping。
关于php - 如何在Codemniter的Datamapper ORM中嵌套WHERE参数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9040563/