Вы можете применить ИЛИ локально следующим образом:
use SQL::Abstract;
my $sql = SQL::Abstract->new;
my ($stmt, @bind) = $sql->where(
{ -or => [ { field_1 => { 'like', 'John' }},
{ field_2 => { 'like', 'John' }},
],
}, []);
дает $stmt
:
WHERE ( ( field_1 LIKE ? OR field_2 LIKE ? ) )
Свойство logic
можно установить в конструкторе SQL::Abstract
, ноЯ понятия не имею, как распространяться из Class::DBI
.
Редактировать : я не знаю, является ли это ошибкой или функцией, но это операторы, измененные предложением logic
кажется применимым только когда вы определяете с помощью arrayrefs.С hashrefs вы всегда получаете AND:
my $sql_and = SQL::Abstract::Limit->new(logic => 'AND');
my $sql_or = SQL::Abstract::Limit->new(logic => 'OR');
say $sql_and->where(['field_1'=>{'like' => '123'},'field_2'=>{'like'=>'123'}]);
# WHERE ( ( field_1 LIKE ? AND field_2 LIKE ? ) )
say $sql_or->where (['field_1'=>{'like' => '123'},'field_2'=>{'like'=>'123'}]);
# WHERE ( ( field_1 LIKE ? OR field_2 LIKE ? ) )
Или для работы с Class::DBI
:
my $results = Example::CDBI::Quote->search_where(
[ field_1 => {'like', $search_string},
field_2 => {'like', $search_string}],
{logic => 'or'}
);