如何在Propel query for Oracle中为列名设置别名?

时间:2014-08-15 00:45:52

标签: oracle symfony propel

我需要防止在对象字段表中插入欺骗。用户可以在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中使用列的别名来编写相同的查询?

由于 拉吉

1 个答案:

答案 0 :(得分:1)

未经测试,但我认为这应该有效:

$fieldName = preg_replace('/\s+/', '', strtolower($fieldName));
    $selectColumn = "lower(REPLACE( ObjFieldsPeer::FIELD_NAME,' ', ''))";
    ObjFieldsQuery::create( )
        ->withColumn($selectColumn, 'your_alias')
        ->filterByFieldName( $fieldName )
        ->findOne( );
相关问题