
本文介绍如何在 Odoo 外部 PHP 脚本中使用 XML-RPC 接口,通过 =like 或 =ilike 操作符实现「名称以指定字母开头」的精准模糊搜索,避免全模糊匹配导致的结果泛化。
本文介绍如何在 odoo 外部 php 脚本中使用 xml-rpc 接口,通过 `=like` 或 `=ilike` 操作符实现「名称以指定字母开头」的精准模糊搜索,避免全模糊匹配导致的结果泛化。
在 Odoo 的 XML-RPC API 中,search 方法支持丰富的域(domain)操作符,用于灵活筛选记录。默认的 = 是精确匹配,而要实现「名称以 s 开头」这类前缀匹配,需借助 PostgreSQL 风格的通配符与 Odoo 特定的操作符配合使用。
关键在于选择正确的操作符与通配符组合:
-
=like:大小写敏感的模糊匹配,需显式指定通配符; -
=ilike:大小写不敏感的模糊匹配,同样需显式指定通配符; - ❌ 避免仅用
like或ilike(无等号前缀):Odoo 会自动在前后添加%,变成'%s%',即「包含s」而非「以s开头」。
因此,若要查找 project.project 中名称以小写字母 s 开头的项目(忽略大小写),应将原搜索域:
array(array('name', '=', 'Sanda'))
替换为:
array(array('name', '=ilike', 's%'))
完整修正后的 PHP 示例代码如下(含错误处理建议):
$url = 'http://localhost:8069'; // 请替换为实际端口(如 8069)
$url_auth = $url . '/xmlrpc/2/common';
$url_exec = $url . '/xmlrpc/2/object';
$username = 'admin';
$password = 'your_password';
$db = 'your_db_name';
require_once('ripcord/ripcord.php');
try {
$common = ripcord::client($url_auth);
$models = ripcord::client($url_exec);
$uid = $common->authenticate($db, $username, $password, array());
if (!$uid) {
throw new Exception("Authentication failed.");
}
// ✅ 搜索名称以 's' 开头(不区分大小写)的项目
$customer_ids = $models->execute_kw(
$db, $uid, $password,
'project.project',
'search',
array(array(array('name', '=ilike', 's%')))
);
echo "Found project IDs: " . json_encode($customer_ids) . "\n";
} catch (Exception $e) {
error_log("Odoo API Error: " . $e->getMessage());
echo "Error: " . $e->getMessage();
}
? 注意事项:
-
s%中的%表示「零个或多个任意字符」,确保匹配Sales,Support,sprint等,但不匹配Task或Design; - 若需严格匹配小写
s开头(如排除Sales),请改用=like 's%'并确保数据库 collation 支持大小写敏感排序; - 建议对用户输入做基础校验(如过滤空格、转义单引号),防止注入风险(虽 XML-RPC 本身不直接受 SQL 注入影响,但业务逻辑层仍需谨慎);
- 生产环境务必使用 HTTPS 和安全凭证管理,避免明文硬编码密码。
掌握 =like / =ilike 与通配符的组合,是构建健壮 Odoo 外部集成搜索功能的基础能力——既保持灵活性,又不失精确性。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










