SQL注入!
首先,您遇到的是 SQL 注入漏洞,因为您将用户数据插入 SQL 片段而不是使用key => value
格式,这将导致带有绑定值的正确查询!
请务必阅读Cookbook > 数据库访问和 ORM > 查询生成器 > 高级条件有关如何正确构建高级条件的更多信息!
搜索翻译内容
通过翻译的内容进行搜索,翻译行为添加了一个hasOne
每个可翻译字段的关联,默认情况下命名方案是TableAlias_field_translation
,例如Ingredients_name_translation
.
该关联会被自动包含,因此您可以搜索其content
字段,它可能会保存翻译的内容。
从 CakePHP 3.4.0 或 3.4.4 开始,您可以使用translationField()
翻译行为提供的方法,它将根据区域设置返回正确的别名字段:
->where([
$this->Ingredients->translationField('name') . ' LIKE' =>
'%' . $this->request->query('k') . '%'
])
注意,在3.4.4之前,translationField()
不会考虑区域设置与默认区域设置匹配的情况!在这种情况下,您需要查询原始表name
列,但在 3.4.4 之前,该方法总是返回content
关联转换表的列。
也可以看看Cookbook > 数据库访问和 ORM > 行为 > 翻译 > 查询翻译字段
在 CakePHP 3.4 之前的版本中,您必须自己构建列名称,例如:
->where([
'Ingredients_name_translation.content LIKE' => '%' . $this->request->query['k'] . '%'
])
在上述情况下,如果定位集与默认语言匹配,则翻译行为将不包含翻译表关联,因此您必须采取适当的措施来确保在条件中使用正确的字段,基于关于所使用的语言,即使用Ingredients.name
如果使用默认语言!