
本文介绍如何在 Odoo 外部 PHP 脚本中,通过 XML-RPC 接口实现“字段值以某字符开头”的模糊搜索,重点讲解 =like 和 =ilike 搜索操作符的正确用法及注意事项。
本文介绍如何在 odoo 外部 php 脚本中,通过 xml-rpc 接口实现“字段值以某字符开头”的模糊搜索,重点讲解 `=like` 和 `=ilike` 搜索操作符的正确用法及注意事项。
在 Odoo 的外部 API(XML-RPC)调用中,search 方法支持结构化搜索域(domain),其语法为 [('field', 'operator', value)]。默认的 = 操作符仅匹配完全相等的值;若需实现“以某字符开头”的模糊匹配,必须使用支持通配符的字符串操作符。
✅ 正确做法:使用 =like 或 =ilike
-
=like:区分大小写的前缀匹配,需手动添加%通配符表示“后续任意字符”。
示例:查找name字段以小写字母's'开头的项目:$customer_ids = $models->execute_kw( $db, $uid, $password, 'project.project', 'search', array(array('name', '=like', 's%')) // ✅ 匹配 'Sanda'、'sprint',但不匹配 'SANDA' ); -
=ilike:不区分大小写的前缀匹配,同样需显式使用%。
示例:匹配所有name以's'或'S'开头的记录:$customer_ids = $models->execute_kw( $db, $uid, $password, 'project.project', 'search', array(array('name', '=ilike', 's%')) // ✅ 匹配 'Sanda'、'sprint'、'Sprint' );
⚠️ 关键注意事项
❌ 错误写法:
('name', 'like', 's%')或('name', 'ilike', 's%')
—— 缺少等号前缀(=)会导致 Odoo 自动在前后添加%,即等价于'%s%',变成包含匹配(中缀搜索),可能返回大量非预期结果(如'Task'、'Mission'等含's'的记录)。✅ 必须显式写出
=like/=ilike,且%仅置于右侧(前缀匹配)或两侧(如's%e'表示“以 s 开头、以 e 结尾”)。-
? 其他常用通配符:
-
_表示任意单个字符(如's_nda'可匹配'Sanda'但不匹配'Sandra'); -
%表示零个或多个字符,是前缀/后缀/中缀匹配的核心。
-
? 实用建议
- 在生产环境中,建议优先使用
=ilike提升用户体验(避免因大小写导致查询失败); - 若字段内容规范(如全小写存储),可选用
=like获得更精确控制; - 对于高并发场景,注意
like类查询无法高效利用标准 B-tree 索引;如需极致性能,可配合数据库层面的pg_trgm扩展或添加函数索引(如CREATE INDEX idx_project_name_prefix ON project_project USING btree (lower(name) text_pattern_ops);)。
通过以上调整,您的 PHP 脚本即可精准、高效地实现 Odoo 数据库中“以指定字符开头”的外部搜索需求。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










