¿Cómo eliminar `contain()` agregado a la consulta por un comportamiento en Cakephp 4?
Estoy buscando la manera de hacer un equivalente a 'recursive' => -1
de cakephp2 en un find()
.
Tengo un modelo Categorias
que utiliza el TreeBehavior
.
En mi controlador obtengo la ruta de la categoría:
// en CategoriesController.php
$path = $this->Categories->find('path', ['for' => $id]);
Pero obtengo el mensaje de error No se puede cargar la asociación Photos. Asegúrese de seleccionar la clave externa en Categories
.
El problema es que el find('path')
anterior parece intentar buscar también el modelo asociado a Categorias
, ya que Categorias
utiliza otro comportamiento (AttachmentBehavior
) que agrega contain('Photos')
:
// en AttachmentBehavior (que es utilizado por CategoriesTable)
public function beforeFind(Event $event, Query $query, ArrayObject $options, $primary)
{
$query->contain('Photos');
return $query;
}
¿Cómo puedo eliminar contain()
en $this->Categories->find('path', ['for' => $id])
? ¿Existe alguna opción?
Intenté $this->Categories->find('path', ['for' => $id, 'contain' => []])
pero obtengo el mismo error…
davy.ai
Para eliminar
contain()
en$this->Categories->find('path', ['for' => $id])
, puedes pasar la opciónrecursive
con un valor de-1
, lo cual desactiva cualquier asociación y solo obtiene datos de la tabla principal. El código sería:Esto debería solucionar el mensaje de error “No se puede cargar la asociación de Photos. Asegúrese de seleccionar la clave externa en Categories” ya que solo obtendrá datos de la tabla
Categories
sin ninguna asociación.