Pregunta

Estoy usando una base de datos muy intrínseca con una aplicación CakePHP y hasta ahora mis vistas y controladores de modelos múltiples funcionan bien. Tengo una tabla singular ( Entity ) que tiene su id en varias otras tablas como la clave externa entity_id

Algunas tablas son relaciones uno a uno (como una Company es una Entity ) y algunas son una a muchas ( Entity pueden tener varias Addresses ) y así sucesivamente.

No quiero / no puedo cambiar el modelo de base de datos , así que esta es la estructura.

He estado usando saveAll () para guardar datos en esas tablas con nombres de entrada como:

Entity.type='x' (hidden inside the view)
Company.name
Address.0.street
Address.0.city
Address.1.street
Address.1.city

... and so on ...

y my save all está haciendo todo el trabajo duro, BEGIN TRANSACTION , todos los INSERT y un COMMIT ...

Pero ahora he creado una EntityCategory que es una relación n a n y he creado la relación completa HABTM dentro del modelo.

Funciona cuando save () pero solo la relación HABTM , y guarda todo cuando uso saveAll () (solo como antes) excepto por la relación HABTM .

¿Me estoy perdiendo algo? ¿Cómo hago para que esto funcione correctamente? Estoy usando el siguiente código hoy:

if (!empty($this->data)) {
  $this->Entity->saveAll($this->data);
  $this->Entity->save($this->data);
}

El saveAll () guarda todos los datos en varias tablas, guarda el id en Entity- > id y el save () guarda las relaciones HABTM , pero no estoy seguro de si es correcto o si me puede traer problemas si cambio alguna estructura / modelo.

¿Es esta la mejor manera de usarlo? ¿Hay alguna forma correcta de guardar esas relaciones dentro de CakePHP? ¿Qué me puede decir su experiencia / conocimiento?

¿Fue útil?

Solución

Esto se soluciona si descarga nightly .

Tenga cuidado, sin embargo, algo más podría romperse.

Otros consejos

El problema con las asociaciones saveAll () y HABTM es un conocido CakePHP problema , y tiene no resuelto a partir de 1.2 RC2.

Tan rápido como las mejores prácticas para guardar datos de modelos relacionados, según CakePHP libro de cocina :

  

" Al trabajar con modelos asociados, es importante darse cuenta de que guardar los datos del modelo siempre debe hacerse con el modelo CakePHP correspondiente. Si está guardando una nueva publicación y sus comentarios asociados, entonces usaría los modelos de publicación y comentario durante la operación de guardar. & Quot;

Sin embargo, usar saveAll () y save () debería funcionar, y en mi humilde opinión es una solución más flexible / genérica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top