我需要防止在对象字段表中插入欺骗。用户可以在UI中使用/不使用空格输入此字段的输入b / w字段以及字段名称的大写/小写,例如:
1. test field
2. TestField
3. TEST FIELD
以上任意组合。我应该通过擦洗白色空格b / w字来防止插入重写值。该检查仅用于在插入/更新之前检查现有值。但我们存储了用户给出的实际输入。
我必须在Symfony中编写一个推进查询,这相当于我运行的Oracle select查询,以检查相同的"字段名称"存在。
`SELECT lower(REPLACE(field_name, ' ', '')),
field_id
from object_fields
where field_name=lower('testfield');`
SYmfony / Propel Query我试过:
$fieldName = preg_replace('/\s+/', '', strtolower($fieldName));
$selectColumn = "lower(REPLACE( ObjFieldsPeer::FIELD_NAME,' ', ''))";
ObjFieldsQuery::create( )
->withColumn($selectColumn)
->filterByFieldName( $fieldName )
->findOne( );
它为我提供了以下Oracle SQL查询:
select OBJECT_FIELDS.FIELD_ID,
lower(REPLACE(OBJECT_FIELDS.FIELD_NAME, ' ', ''))
AS lowerREPLACEOBJECT_FIELDSFIELD_NAME, ' ', ''
FROM OBJECT_FIELDS
WHERE OBJECT_FIELDS.FIELD_NAME='testfield';
我得到Oracle错误" ORA-00972:标识符太长"
任何人都知道如何在Propel / Symfony中使用列的别名来编写相同的查询?
由于 拉吉
答案 0 :(得分:1)
未经测试,但我认为这应该有效:
$fieldName = preg_replace('/\s+/', '', strtolower($fieldName));
$selectColumn = "lower(REPLACE( ObjFieldsPeer::FIELD_NAME,' ', ''))";
ObjFieldsQuery::create( )
->withColumn($selectColumn, 'your_alias')
->filterByFieldName( $fieldName )
->findOne( );