2011-05-25 11 views
6

Soy nuevo en CakePHP, por lo que me puede estar perdiendo lo obvio.¿CakePHP finderQuery funciona con SQL Server? ¿Dónde debo depurar eso?

El sistema ejecuta la última descarga utilizando Microsoft SQL Server 2005 como base de datos. Aprecio que sea un poco inusual, pero habiendo solucionado la reescritura de URL no he visto otros problemas.

Me gustaría utilizar un FinderQuery personalizado, pero ni siquiera puedo reemplazar el predeterminado. Específicamente si uso

var $hasMany = array(
     'RecyclateTypeConversion' => array(
     'className' => 'RecyclateTypeConversion', 
     'foreignKey' => 'recyclate_type_id', 
     'dependent' => false, 
     'conditions' => '', 
     'fields' => '', 
     'order' => '', 
     'limit' => '', 
     'offset' => '', 
     'exclusive' => '', 
     'finderQuery' => 'select RecyclateTypeConversion.* from recyclate_type_conversions AS RecyclateTypeConversion WHERE RecyclateTypeConversion.recyclate_type_id IN ({$__cakeID__$});', 
     'counterQuery' => '' 
    ), 
    }; 

I ver este error

Aviso (8): Undefined index: RecyclateTypeConversion [core \ torta \ libs \ modelo \ datasources \ dbo_source.php, línea 1099 ]

Sin embargo, la salida de depuración de SQL confirma que la consulta en sí misma se ejecuta correctamente y devuelve 4 registros, y la vista se ejecuta perfectamente cuando no se especifica finderQuery. También he intentado con otras tablas hasMany, exactamente con el mismo problema.

He intentado reemplazar el seleccionar todo con selecciones de campo específicas pero todavía veo el mismo resultado. Ciertamente, la consulta parece correcta de acuerdo con el manual, entonces, ¿cuál es el problema (y podría estar relacionado con el uso de MSSQL?)

EDITAR: Además, como esto no ha recogido ninguna respuesta, ¿cuál sería el mejor enfoque para depurar esto? Empecé a buscar en la clase de depuración de pasteles, pero hasta ahora sin resultados que me hayan iluminado. Por supuesto, si hay un problema, enviaré la solución de regreso al proyecto.

+0

¿Qué versión de pastel estáis ejecutando? – jimiyash

+0

Estoy ejecutando 1.3.8, descargado hace un par de semanas. Actualizaría a 1.3.9, pero no veo nada que aborde el problema en la lista de arreglos. – Cruachan

Respuesta

2

¿Ha comprobado que no es en realidad un modelo llamado RecyclateTypeConversion y que existe con un nombre de archivo de acuerdo con las convenciones de CakePHP? Es decir. ¿hay un models/recyclate_type_conversion.php y en ese archivo, es el nombre del modelo definido como RecyclateTypeConversion.

El error que está obteniendo parece indicar que hay un problema con el nombre de ese modelo, ya que no puede encontrar el índice asociado.

+0

Comprobé esto, y no, no había generado el modelo. Sin embargo, lamentablemente hacerlo no resuelve el problema. – Cruachan

+0

Bueno, no tengo SQL Server para probarlo, pero mi segunda suposición sería que al usar 'finderQuery' Cake no almacenará los datos devueltos en su formato habitual (siendo' $ this-> data [Model] [ campo] ') pero en un formato diferente (generalmente' $ this-> data [0] 'o similar), de ahí proviene su error de índice indefinido. ¿No puedes hacer 'debug()' en los datos que obtienes justo antes de recibir el error? – vindia

+0

Aceptado por el comentario sobre los formatos – Cruachan

1

¿Lo revisó paso a paso?

  1. trate de sacar todo (todos los datos)
  2. condiciones try
  3. tratar el comportamiento "controlable" para crear la consulta, lo que hace que piensa mucho más fácil en mi opinión
+0

Sin duda intenté eliminarlo - el mismo resultado. Aunque soy nuevo en el pastel, ¿a qué te refieres con una consulta confiable? Estaría abierto a una forma diferente de hacer esto. – Cruachan

+0

"contenible" es un comportamiento que puede usar. tienes que agregar a $ actAs, entonces no puedes agregar modelos a tu consulta de búsqueda como esta: 'contener' => matriz ('nombredelmodelo') y el pastel agregará los datos – alexdd55

2

intente eliminar el alias de la selección: el reparto en la parte "AS RecyclateTypeConversion" debe manejar eso para usted. También me gusta envolver las consultas personalizadas entre comillas dobles. Tal vez sea paranoico, pero los errores de análisis de cadenas me han mordido en el culo antes.

var $hasMany = array(
    'RecyclateTypeConversion' => array(
    'className' => 'RecyclateTypeConversion', 
    'foreignKey' => 'recyclate_type_id', 
    'dependent' => false, 
    'finderQuery' => "select * from recyclate_type_conversions AS RecyclateTypeConversion WHERE RecyclateTypeConversion.recyclate_type_id IN ({$__cakeID__$});", 
); 

Además, le recomiendo que utilice el plugin DebugKit y publicar de nuevo a nosotros el registro de consultas y una salida de depuración de los resultados encontramos que causan los errores.

Cuestiones relacionadas