Foros del Web » Programando para Internet » PHP »

Obtener datos de Base de datos en controlador symfony2

Estas en el tema de Obtener datos de Base de datos en controlador symfony2 en el foro de PHP en Foros del Web. Buenas tengo un duda y no se como resolverla. Antes de nada gracias a quien me pueda ayudar. Bueno pues el problema que tengo es ...
  #1 (permalink)  
Antiguo 09/07/2014, 06:39
 
Fecha de Ingreso: agosto-2013
Ubicación: Oyón/Alava
Mensajes: 23
Antigüedad: 10 años, 8 meses
Puntos: 0
Obtener datos de Base de datos en controlador symfony2

Buenas tengo un duda y no se como resolverla.

Antes de nada gracias a quien me pueda ayudar.

Bueno pues el problema que tengo es el siguiente, quiero sacar de la base de datos una categoría previamente almacenada, la consulta ya la tengo hecha pero al querer sacar un dato concreto de dicha consulta (por ejemplo el ID) symfony me devuelve un error diciendome que el metodo empleado para tal fin no esta definido.

mi controlador es el siguiente.
Código PHP:
public function addCarritoAction(Request $request,$id){
        
$session $request->getSession();
        
$session->start();
        
$em $this->getDoctrine()->getManager();
        
$carro $em->getRepository('frontenBundle:carrito')->findCarrito($session->getId());
        
//        $session->set('carro','1211231231');
        
        
        
if(!$carro){
            
$carrito = new carrito();
            
            
$carrito->setSession($session->getId());
            
$carrito->setIdcliente(null);
            
            
$em->persist($carrito);
            
$em->flush();
        }
        
        
        
$carro $em->getRepository('frontenBundle:carrito')->findCarrito($session->getId());
        
        
$this->addProductoCarro($carro->getI(), $id);
        return new 
Response($session->getId());
    } 
Gracias de antemano, he de decir que aun soy nuevo con symfony2 y se me escapan muchas cosas.
  #2 (permalink)  
Antiguo 09/07/2014, 07:37
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Obtener datos de Base de datos en controlador symfony2

Seria bueno si puedes publicar la entidad que te esta dando problemas y el error que te envía symfony.
Por el código supongo que intentas persistir el contenido de la sesión en la entidad Carrito; si es eso lo que necesitas hacer es implementar Serializable y almacenar el carriro en la sesión y no al revez el ultimo paso debe de ser sacar el objeto de la sesión y persistir la entidad
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 09/07/2014, 10:03
 
Fecha de Ingreso: agosto-2013
Ubicación: Oyón/Alava
Mensajes: 23
Antigüedad: 10 años, 8 meses
Puntos: 0
Respuesta: Obtener datos de Base de datos en controlador symfony2

Buenas siento la tardanza.

Las entidades relacionadas en el error son las siguientes.


Entidad Carrito:
Código PHP:
<?php

namespace wolfrcfrontenBundleEntity
;

use 
DoctrineORMMapping as ORM;
use 
DoctrineCommonCollectionsArrayCollection;

/**
 * carrito
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="wolfrc\frontenBundle\Entity\carritoRepository")
 */
class carrito
{
    
/**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    
private $id;

    
/**
     * @var string
     *
     * @ORM\Column(name="idcliente", type="string", length=255, nullable=true)
     */
    
private $idcliente;

    
/**
     * @var string
     *
     * @ORM\Column(name="session", type="text")
     */
    
private $session;
    
    
/**
     *
     * @ORM\OneToMany(targetEntity="productoCarro", mappedBy="carrito")
     */
    
protected $productoCarro;
    
    
    public function 
__construct() {
        
$this->productoCarro = new ArrayCollection();
    }
    


    
/**
     * Get id
     *
     * @return integer 
     */
    
public function getId()
    {
        return 
$this->id;
    }

    
/**
     * Set idcliente
     *
     * @param string $idcliente
     * @return carrito
     */
    
public function setIdcliente($idcliente)
    {
        
$this->idcliente $idcliente;

        return 
$this;
    }

    
/**
     * Get idcliente
     *
     * @return string 
     */
    
public function getIdcliente()
    {
        return 
$this->idcliente;
    }

    
/**
     * Set session
     *
     * @param string $session
     * @return carrito
     */
    
public function setSession($session)
    {
        
$this->session $session;

        return 
$this;
    }

    
/**
     * Get session
     *
     * @return string 
     */
    
public function getSession()
    {
        return 
$this->session;
    }
}
Entidad ProductoCarro:
Código PHP:
<?php

namespace wolfrcfrontenBundleEntity
;

use 
DoctrineORMMapping as ORM;

/**
 * productoCarro
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="wolfrc\frontenBundle\Entity\productoCarroRepository")
 */
class productoCarro
{
    
/**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    
private $id;

    
/**
     * @var string
     *
     * @ORM\Column(name="producto", type="string", length=255)
     */
    
private $producto;

    
/**
     * @ORM\ManyToOne(targetEntity="carrito", inversedBy="productoCarro")
     * @ORM\JoinColumn(name="carrito_id", referencedColumnName="id")
     */
    
protected $carrito;

    
/**
     * Get id
     *
     * @return integer 
     */
    
public function getId()
    {
        return 
$this->id;
    }

    
/**
     * Set producto
     *
     * @param string $producto
     * @return productoCarro
     */
    
public function setProducto($producto)
    {
        
$this->producto $producto;

        return 
$this;
    }

    
/**
     * Get producto
     *
     * @return string 
     */
    
public function getProducto()
    {
        return 
$this->producto;
    }
}

Y el error que me devuelve symfony es el siguiente.
Código HTML:
 FatalErrorException: Error: Call to a member function getId() on a non-object in /home/endika/www/wolfrc/src/wolfrc/frontenBundle/Controller/carritoController.php line 35
La linea en cuestion es la siguiente.
Código PHP:
$carro $em->getRepository('frontenBundle:carrito')->findCarrito($session->getId());
        
        
$this->addProductoCarro($carro->getId(), $id); 

Ahora bien lo que yo intento hacer es lo siguiente, por medio de un link cuando se pincha se accede al controlador que mira si tenemos un carro sino lo creamos y le asignamos la sesión del usuario.

El problema viene cuando quiero asociar los el productoCarro al carrito correspondiente.

Espero haberme explicado con claridad y gracias otra vez.
  #4 (permalink)  
Antiguo 09/07/2014, 11:32
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Obtener datos de Base de datos en controlador symfony2

Código PHP:
Ver original
  1. $carro = $em->getRepository('frontenBundle:carrito')->findCarrito($session->getId());
Me temo que $carro no contiene nada por eso en la siguiente linea te marca error; prueba con esto:
Código PHP:
Ver original
  1. $carro = $em->getRepository('frontenBundle:carrito')->findBySession($session->getId());

Si estas manejando usuario puedes en el controlador obtener el usuario en cualquier momento usando el security context
Código PHP:
Ver original
  1. //Esta forma te sirve desde el controlador o cualquier clase que tenga
  2. //acceso al security context
  3. $user = $this->get('security.context')->getToken()->getUser();
  4.  
  5. //Esta forma es solo para el controlador y es un alias de
  6. //la primera
  7. $user = $this->getUser();
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: controlador, symfony2
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 04:20.