При использовании Kohana 2 вы можете сделать следующее:
в файле system/libraries/ORM.php:223
внутри __call()
добавить 'or_open_paren'
в массиве в
if (in_array($method, array('open_paren', 'close_paren', 'enable_cache', 'disable_cache'))) {
или, если этот файл еще не исправлен, измените case 0:
, чтобы он выглядел следующим образом:
case 0:
if (in_array($method, array('open_paren', 'or_open_paren', 'close_paren', 'enable_cache', 'disable_cache'))) {
$this->db->$method();
} else {
return $this->db->$method();
}
break;
добавить следующий код к system/libraries/Database.php
public function open_paren()
{
$this->where[] = $this->get_where_count() ? 'AND (' : '(';
return $this;
}
public function or_open_paren()
{
$this->where[] = $this->get_where_count() ? 'OR (' : '(';
return $this;
}
public function close_paren()
{
$this->where[] = ')';
return $this;
}
protected function get_where_count()
{
$lastWhen = end($this->where);
if ( $lastWhen === false )
return 0;
$lastWhen = trim( str_replace( array('AND ', 'OR '), '', $lastWhen ) );
return $lastWhen === '(' ? 0 : count($this->where);
}
и замените все экземпляры count($this->where)
на $this->get_where_count()
в том же файле, за исключением нового метода get_where_count()
(очевидно) и метода delete($table, $where)
(всего 11 замен).