Sonata Admin Bundle Un-à-Plusieurs relation pas l'économie ID étranger
J'ai un problème avec le SonataAdminBunle en combinaison avec symfony 2.2.
J'ai un Projet de l'entité et une ProjectImage entité et spécifié un Un-à-Plusieurs relation entre ces deux:
class Project
{
/**
* @ORM\OneToMany(targetEntity="ProjectImage", mappedBy="project", cascade={"all"}, orphanRemoval=true)
*/
private $images;
}
class ProjectImage
{
/**
* @ORM\ManyToOne(targetEntity="Project", inversedBy="images")
* @ORM\JoinColumn(name="project_id", referencedColumnName="id")
*/
private $project;
}
J'ai configuré le ProjectAdmin et ProjectImageAdmin:
class ProjectAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('title')
->add('website')
->add('description', 'textarea')
->add('year')
->add('tags')
->add('images', 'sonata_type_collection', array(
'by_reference' => false
), array(
'edit' => 'inline',
'inline' => 'table',
'sortable' => 'id',
))
;
}
}
class ProjectImageAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('file', 'file', array(
'required' => false
))
;
}
}
Le problème est que dans le project_image table dans la base de données de la project_id n'est pas enregistré, alors que toutes les autres données et aussi l'image est enregistrée. Ne pouvais pas trouver un travail de répondre à n'importe où ailleurs.
Avez-vous essayé de l'enlever by_reference?
Oui, je n'ai essayer que. Malheureusement pas de résultat.
Avez-vous des setImages, addImage, removeImage et getImages méthodes dans votre Projet d'entreprise?
Je n'ai pas de setImages méthode, que devrait-il ressembler?
L'ai, je vous remercie. La réponse est donnée ici: github.com/sonata-project/SonataAdminBundle/issues/...
Oui, je n'ai essayer que. Malheureusement pas de résultat.
Avez-vous des setImages, addImage, removeImage et getImages méthodes dans votre Projet d'entreprise?
Je n'ai pas de setImages méthode, que devrait-il ressembler?
L'ai, je vous remercie. La réponse est donnée ici: github.com/sonata-project/SonataAdminBundle/issues/...
OriginalL'auteur R Lems | 2013-06-07
Vous devez vous connecter pour publier un commentaire.
Bien que non, j'avais légèrement modifier votre Un-à-Plusieurs annotation:
Retour sur la piste, vos annotations et Sonata Admin formes ont l'air bien, donc je suis sûr que vous avez manqué l'une de ces méthodes dans votre Projet de classe d'entité:
Et dans votre Admin catégorie:
Cette Sonate Bundle devient assez poilu. Le
prePersist()
|preUpdate()
suggestion m'a aidé.. mais je devais faire quelque chose d'un peu différent. Voir le gist - gist.github.com/justinpfister/9634619Peut-être que vous devriez le faire
foreach
danssetEntries
à la place? Il semble étrange de le faire danspreUpdate
OriginalL'auteur Pier-Luc Gendreau
Depuis, les choses ont changé avec le formulaire de Symfony collection est aujourd'hui l'ajout de la la méthode addChild() et removeChild() avec le by_reference option faux automatiquement persister la Collecte et de définir l'IDENTIFIANT sur le côté inverse comme prévu.
Voici une version de travail:
https://gist.github.com/webdevilopers/1a01eb8c7a8290d0b951
La la méthode addChild() méthode doit contenir la définition pour le parent sur l'enfant:
OriginalL'auteur webDEVILopers
Vous ca faire directement dans le preUpdate fonction
OriginalL'auteur Razvan.432
Passer par ce lien
http://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/form_field_definition.html#advanced-usage-many-to-one
ce lien vous aidera beaucoup sur la cartographie de l'association sonata admin bundle.
Grâce kleopatra de remarquer mon erreur. Je vais prendre soin de votre suggestion pour la prochaine fois.
OriginalL'auteur Sandeep Gupta
Une façon que j'ai résolu le a été de définir manuellement tous les inverse du côté des associations grâce à une coutume Sonate modèle manager.
Assurez-vous de définir cela comme un nouveau service à vos services.fichier yml:
OriginalL'auteur coryjb
Cela a parfaitement résolu le problème pour moi merci !
OriginalL'auteur Cyrille Hejl
la solution la plus simple est, et naturellement remplacer vos noms de variable; ce qui fonctionne pour moi:
'by_reference' => false
comme suit:
OriginalL'auteur Shadi Akil