Erreur Fatale: un Objet de la classe n'a pas pu être converti en chaîne
J'ai cette Entité définie:
namespace CategoryBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Gedmo\Mapping\Annotation as Gedmo;
/**
* @ORM\Entity
* @ORM\Table(name="category")
*/
class Category {
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*
*/
protected $id;
/**
*
* @ORM\Column(type="string", length=255, nullable=false)
*/
protected $name;
/**
*
* @ORM\Column(type="integer", nullable=true)
*/
protected $parent;
/**
*
* @ORM\Column(type="string", length=255, nullable=true)
*/
protected $description;
/**
*
* @ORM\Column(type="integer")
*/
protected $age_limit;
/**
* @Gedmo\Timestampable(on="create")
* @ORM\Column(name="created", type="datetime")
*/
protected $created;
/**
* @Gedmo\Timestampable(on="update")
* @ORM\Column(name="modified", type="datetime")
*/
protected $modified;
public function getId() {
return $this->id;
}
public function setParent(Category $parent = null) {
$this->parent = $parent;
}
public function getParent() {
return $this->parent;
}
public function setName($name) {
$this->name = $name;
}
public function getName() {
return $this->name;
}
public function setDescription($description) {
$this->description = $description;
}
public function getDescription() {
return $this->description;
}
public function setAgeLimit($age_limit) {
$this->age_limit = $age_limit;
}
public function getAgeLimit() {
return $this->age_limit;
}
public function setCreated($created) {
$this->created = $created;
}
public function getCreated() {
return $this->created;
}
public function setModified($modified) {
$this->modified = $modified;
}
public function getModified() {
return $this->modified;
}
}
Puis j'ai cette méthode dans mon contrôleur pour gérer l'envoi du formulaire:
/**
* Handle category creation
*
* @Route("/category/create", name="category_create")
* @Method("POST")
* @Template("CategoryBundle:Default:new.html.twig")
*/
public function createAction(Request $request) {
$entity = new Category();
$form = $this->createForm(new CategoryType(), $entity);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($entity);
$em->flush();
return $this->redirect($this->generateUrl('category_list'));
}
return $this->render('CategoryBundle:Default:new.html.twig', array(
'entity' => $entity,
'form' => $form->createView(),
));
}
Et enfin, c'est ma CategoryType.php
:
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder
->add('parent', 'entity', array('class' => 'CategoryBundle:Category', 'property' => 'name', 'required' => false))
->add('name')
->add('description')
->add('age_limit');
}
Quand j'essaie d'enregistrer les données, j'obtiens cette erreur:
Une exception s'est produite lors de l'exécution 'INSÉRER DANS la catégorie (nom,
parent, description, age_limit, de création, de modification) VALUES (?, ?, ?, ?,
?, ?)' avec params ["Cat2", {}, null, 2, "2013-08-06 09:58:03",
"2013-08-06 09:58:03"]:Erreur Fatale: un Objet de la classe CategoryBundle\Entity\Categorie
n'a pas pu être converti en chaîne de
/var/www/html/vendor/doctrine/dbal/lib/Doctrine/DBAL/Statement.php
ligne 138
Ce que je fais mal? Comment puis-je accéder à la propriété dans ma méthode afin que je puisse enregistrer la valeur?
Mise à JOUR
Sur la base de propositions faites par @sybio, je réécris mon Entité alors maintenant j'ai ceci:
/**
* @ManyToOne(targetEntity="Category")
* @JoinColumn(name="parent", referencedColumnName="id")
*/
protected $parent;
Est ce que le droit?
oubliez la ligne 60, que l'erreur a été causée par une
echo
le droit a l'erreur est dans le post édité
OriginalL'auteur Reynier | 2013-08-06
Vous devez vous connecter pour publier un commentaire.
Ici ce que je pense :
Vous essayez d'enregistrer une Catégorie de l'objet en tant que parent, mais dans le code suivant :
Vous avez dit que l'un des parents est un entier, donc le cadre d'essayer de sauver la catégorie parent comme un entier, mais pour les pieds, c'est probablement la conversion de l'objet en tant que chaîne de caractères avant, et donc il se bloque...
Je ne suis pas totalement sûr, mais vous devez repenser votre propriété "$parent".
Il devrait être un l'auto référencement rapport.
Exemple :
N'oubliez pas de revoir votre getter /setter :
Espère que c'est la solution !
$parent
est un vous dit: "une relation de soi". Car ce sont mes premiers pas avec Symfony2 j'aurai besoin d'un peu d'aide auprès de vous, vous pouvez prendre un coup d'oeil à mon édition?Votre propriété est bon maintenant (vous choisissez l'un-à-un grand Nombre d'auto-référencement relation unidirectionnelle), et le champ sera nommé "parent" dans la base de données. Vérifier mon montage, j'ai collé ce que vous devriez avoir comme getter et setter ;). Profitez-en !
Signifiait "Beaucoup À Un auto-référencement unidirectionnelle" (pas "Un À Plusieurs") *
OriginalL'auteur Sybio