У меня проблемы с конкретным запросом, используя Datamapper ORM для 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 просто для того, чтобы вложить ИЛИ условное!Я также понимаю, что могу использовать подзапросы, но опять же, я не думаю, что это должно быть так сложно.
Есть что-то, что я пропускаю?Какой-то способ организовать этот запрос, чтобы я мог выполнить его с помощью синтаксиса Datamapper?Кажется, что возможность указания порядка операций операторов AND / OR должна быть каким-то образом встроена ...