Как вкладывать ГДЕ параметры в Datamapper ORM для Codeigniter? - PullRequest
2 голосов
/ 28 января 2012

У меня проблемы с конкретным запросом, используя 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 должна быть каким-то образом встроена ...

1 Ответ

1 голос
/ 28 января 2012

Если вам нужны скобки для предложений where, вам нужно добавить их.

См. http://datamapper.wanwizard.eu/pages/get.html#Query.Grouping для некоторых примеров.

...