Foros del Web » Programando para Internet » PHP » Zend »

Doctrine error con DQL Delete

Estas en el tema de Doctrine error con DQL Delete en el foro de Zend en Foros del Web. hola a todos estoy trabajando con doctrine 2 y zend framework, estoy usando el DQL de doctrine en un metodo de mi clase del modelo ...
  #1 (permalink)  
Antiguo 12/04/2012, 20:30
 
Fecha de Ingreso: enero-2012
Mensajes: 20
Antigüedad: 12 años, 3 meses
Puntos: 0
Doctrine error con DQL Delete

hola a todos estoy trabajando con doctrine 2 y zend framework, estoy usando el DQL de doctrine en un metodo de mi clase del modelo usuario.php que aqui la muestro el metodo que me da error es el deleteUser
/**
* @Entity
* @Table(name="usuario")
*/

class Default_Model_usuario
{
/**
* @Id @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
private $idusuario;

/** @Column(type="boolean") */
private $conectado;

/** @Column(type="string") */
private $nombre;

/** @Column(type="string") */
private $identificador;



public function deleteUser($idusuario)
{
$query = $em->createQuery('DELETE u FROM platpsi\models\usuario u WHERE u.idusuario = $idusuario');
$users = $query->getResult();

}
public function getNombre()
{
return $this->nombre;
}
public function getId()
{
return $this->idusuario;

}
}
Lo que quiero hacer con el metodo deleteUser es que me elimine toda la fila de la tabla usuario donde idsusuario coincida con el que me entran por parametro

en mi clase controladora pongo esto
public function init()
{
/* Initialize action controller here */
$this->initView();
$this->view->baseUrl = $this->_request->getBaseUrl();
//objetos para relizar la vinculacion con las modelos
$registry = Zend_Registry::getInstance();
$this->_em = $registry->entitymanager;
}
public function deleteAction()
{

$selectUser=$this->getRequest()->getParam('arreglo');
$usuario=new Default_Model_usuario();
$usuario->deleteUser($selectUser);
$this->_em->persist($usuario);
$this->_em->flush();
$this->_helper->viewRenderer->setNoRender();
$this->_helper->layout->disableLayout();
}



Me da este error
Notice: Undefined variable: em in C:\Archivos de programa\Zend\Apache2\htdocs\platpsi\application\m odels\usuario.php on line 35

Fatal error: Call to a member function createQuery() on a non-object in C:\Archivos de programa\Zend\Apache2\htdocs\platpsi\application\m odels\usuario.php on line 35
QUE ESTOY HACIENDO MAL, AGRADECERIA SI ME PUDIERAN AYUDAR. Saludos Meralys
  #2 (permalink)  
Antiguo 12/04/2012, 21:04
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Doctrine error con DQL Delete

El problema es que estas usando la variable $em dentro de tu método, pero nunca la obtienes de ningún lado, viendo tu controller, debes de sacarlo del registro.

Por otro lado, tus entidades deben de ser lo más básicas posibles, no pongas métodos complejos dentro de ellas, para eso puedes hacer un repositorio personalizado.

Saludos.
  #3 (permalink)  
Antiguo 12/04/2012, 21:12
 
Fecha de Ingreso: enero-2012
Mensajes: 20
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Doctrine error con DQL Delete

me puedes explicar lo de los repositorios mejor es que estoy empezando con doctrine 2 , y lo que me dijistes de la variable $em quedaria de esta forma

public function deleteUser($idusuario)
{
$registry = Zend_Registry::getInstance();
$this->_em = $registry->entitymanager;
$query = $this->_em->createQuery('DELETE u FROM platpsi\models\usuario u WHERE u.idusuario = $idusuario');
$users = $query->getResult();

}
o es de otra manera???
  #4 (permalink)  
Antiguo 12/04/2012, 21:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Doctrine error con DQL Delete

Te recomiendo ver este tema: http://docs.doctrine-project.org/pro...h-objects.html

Simplemente obtienes tu entity, y usas el método remove() del EntityManger, en ese link que te deje puedes ver como trabajar con D2.

Saludos.
  #5 (permalink)  
Antiguo 12/04/2012, 21:54
 
Fecha de Ingreso: enero-2012
Mensajes: 20
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Doctrine error con DQL Delete

y el metodo remove() del EntityManger permite eliminar la tabla completa de los usuarios o el registro que yo desee eliminar??? porque segun lo que he visto elimina la tabla completa nunca he visto que elimine un registro
  #6 (permalink)  
Antiguo 12/04/2012, 21:59
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Doctrine error con DQL Delete

Elimina la entidad, acuérdate que D2 es un ORM, no hay tablas como tal, son repositorios de objetos, entonces sí obtienes una entidad, la puedes remover:
Código PHP:
Ver original
  1. $user = $em->find('User', 1);
  2. $em->remove($user);
  3. $em->flush();

Saludos.
  #7 (permalink)  
Antiguo 12/04/2012, 22:03
 
Fecha de Ingreso: enero-2012
Mensajes: 20
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Doctrine error con DQL Delete

ha ya entendi hice algo parecido para obtener todos los datos de una tabla utilizando el find, muchas gracias por tu ayuda, mañana lo prueba, poruqe soy de Cuba y aqui ya son las 12 de la noche y tengo clase mañana. Saludos
  #8 (permalink)  
Antiguo 13/04/2012, 05:17
 
Fecha de Ingreso: enero-2012
Ubicación: España
Mensajes: 150
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Doctrine error con DQL Delete

Cita:
Iniciado por GatorV Ver Mensaje
Elimina la entidad, acuérdate que D2 es un ORM, no hay tablas como tal, son repositorios de objetos, entonces sí obtienes una entidad, la puedes remover:
Código PHP:
Ver original
  1. $user = $em->find('User', 1);
  2. $em->remove($user);
  3. $em->flush();

Saludos.
¿ En caso de tener que hacer una consulta como esta o parecida, donde deberia de ir el codigo ?
¿ Todo en un metodo en el repositorio o parte en el repositorio y parte en el controlador ?
¿ o en el modelo o manejador ?

Supongamos que queremos insertar un registro.
$user = new User();
$user->nombre = 'nombre';
$user->apellidos = 'apellidos';
$em->persist();
$em->flush();

Lo que pregunto es si es mejor asi

En el controlador
$ManejadorUser->insertar(array('nombre'=> 'nombre', 'apellidos'=>'apellidos');

En el manejador de usuarios

metodo insertar($array){
$user= new $this->_class;
$user->nombre = $array['nombre'];
$user->apellidos= $array['apellidos'];
$this->_em->persist($user);
$this->_em->flush();
}

o directamente todo en el controlador ?
  #9 (permalink)  
Antiguo 13/04/2012, 08:33
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Doctrine error con DQL Delete

Nunca debe de ir en el controlador, todo eso debe de ser parte del modelo, y lo puse así a razón para que pruebe, no porque es lo correcto, simplemente para que vea que no es necesario hacer el DQL para borrar, si no que vea como es que D2 trabaja con entidades directamente.

Saludos.

Etiquetas: doctrine
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:30.