Kohana 3 ORM отсутствует NOT_WHERE? - PullRequest
2 голосов
/ 23 марта 2012

В Кохане, в любом случае, я могу легко отрицать вложенный логический набор?

SELECT * FROM table WHERE NOT ( (id = 1 OR name like 'bob') and col2 = 333 )

я получил этот код ...

$db->and_where(col2, 333)
   ->and_where_open()
        ->or_where(id, 1)
        ->or_where(name, bob)
   ->and_where_close

, который генерирует

SELECT * FROM table WHERE (id = 1 OR name like 'bob') and col2 = 333 

как мне обернуть все эти вещи в НЕ ?

Ответы [ 2 ]

1 голос
/ 23 марта 2012

Пожалуйста, попробуйте это, это не совсем то, что вы хотите, но даст вам мнение:

$db->and_where(col2, 333)
   ->and_where_open()
    ->or_where('id', '!=', 1)
    ->or_where('name', '!=', 'bob')
    ->and_where_close

В руководстве я видел это предложение: «Ограничение результатов запросов выполняется с помощью методов where (), and_where () и or_where (). Эти методы принимают три параметра: столбец, оператор и значение».

вот ссылка: http://kohanaframework.org/3.2/guide/database/query/builder

0 голосов
/ 01 мая 2012

DB :: Expr приходит на помощь!

Вы должны написать что-то вроде этого:

$query = DB::select('users')
    ->where(DB::Expr("NOT ( (id = 1 OR name like 'bob') and col2 = 333 )"))
    ->execute();

если я правильно помню синтаксис. Возможно, DB :: Expr должен быть упакован в массив, я давно не работал с Kohana.

Ссылка API:

http://kohanaframework.org/3.2/guide/api/Database_Expression

ORM хороши для базовых операций, но даже для несколько сложных запросов они могут стать настоящей PITA.

...