Utilizziamo da qualche giorno YII e abbiamo notato un problema.
Abbiamo utilizzato una notazione per le tabelle del tipo "NomeTabella".
Arrivati però al punto di fare una chiamata al DB servendoci del sistema fornito da Yii, ci siamo accorti di un possibile problema che forse potrebbe risultare penalizzante.
Questa è la chiamata che abbiamo scritto:
$sql = "SELECT * FROM ".Livelli::tableName()." WHERE(idLivelloUtente={$idLivelloUtente})";
$livelloUtente = Yii::app()->db->createCommand($sql)->queryRow();
Otteniamo il seguente errore:
CDbCommand failed to execute the SQL statement: SQLSTATE[42703]: Undefined column: 7 ERROR: column "livelloutente" does not exist at character 8. The SQL statement executed was: SELECT livelloUtente FROM "LivelliUtente" "t" WHERE (idLivelloUtente=1)
Per farla breve, Yii forza i tablename affinché risultino in minuscolo.
La funzione è dentro il file ModelCommand.php
protected function generateRelationName($tableName, $fkName, $multiple)
{
if(strcasecmp(substr($fkName,-2),'id')===0 && strcasecmp($fkName,'id'))
$relationName=rtrim(substr($fkName, 0, -2),'_');
else
$relationName=$fkName;
$relationName[0]=strtolower($relationName);
$rawName=$relationName;
if($multiple)
$relationName=$this->pluralize($relationName);
$table=$this->_schema->getTable($tableName);
$i=0;
while(isset($table->columns[$relationName]))
$relationName=$rawName.($i++);
return $relationName;
}
Per noi questo è un problema in quanto sia i nomi delle tabelle che i nomi dei campi sono scritti con camel-back notation.
Avete per caso avuto modo di incontrare questo problema e quindi trovare una soluzione?
Grazie.
Pietro