This topic contains 2 replies, has 1 voice, and was last updated by adriwan_kenoby 7 years, 11 months ago.
- Topic
Hi everybody,
I have a problem with form.
I added a relation between Account (OroCRMAccountBundle:Account) and a custom entity using migration ( because i wanted to have a bidirectionnal relationship )
I want to added a field in my custom entityType to choose an account relied to my entity.
I am aware that the probleme is I added the relation between custom entity and account using migration,
then i havent the attribute $account in my class and then it cannot be shown in form. I assume that it was generated automaticaly. How can i manage it ?
May i use common doctrine relation ? But then the relationship will no longer bidirectionnal …
Moreover, I have notice some weird thing that i don’t understand in form :
– in FormBuilderInterface::add() when i use entity type , i have to define data_class but if i forgot the first ‘\’, i have an error when i want to edit my entity. ( resolver wait for an object but he found boolean ?)
– with OptionsResolverInterface::setDefault(), if i put the first ‘\’ to define data_class then i haven’t error but the ownership field diseapper. I don’t undestand why this make a difference…
Here is my code but you can found it on gitlab :
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205<?phpnamespace Sinabs\MonitoringBundle\Entity;use Doctrine\ORM\Mapping as ORM;use Sinabs\MonitoringBundle\Model\ExtendWebSite;use Oro\Bundle\EntityConfigBundle\Metadata\Annotation\Config;use Oro\Bundle\EntityConfigBundle\Metadata\Annotation\ConfigField;/*** WebSite** @ORM\Table(name="website")* @ORM\Entity(repositoryClass="Sinabs\MonitoringBundle\Entity\WebSiteRepository")* @Config(* defaultValues={* "entity"={* "label"="Web Site",* "plural_label"="Web Sites"* },* "security"={* "type"="ACL",* "permissions"="All"* },* "ownership"={* "owner_type"="BUSINESS_UNIT",* "owner_field_name"="owner",* "owner_column_name"="business_unit_owner_id",* "organization_field_name"="organization",* "organization_column_name"="organization_id"* }* }* )**/class WebSite extends ExtendWebSite {/*** @var integer** @ORM\Column(name="id", type="integer")* @ORM\Id* @ORM\GeneratedValue(strategy="AUTO")*/private $id;/*** @var string** @ORM\Column(name="name", type="string", length=255)*/private $name;/*** @var string** @ORM\Column(name="url", type="string", length=255)*/private $url;/*** @var Sinabs\MonitoringBundle\Entity\Sonde** @ORM\OneToMany(targetEntity="Sinabs\MonitoringBundle\Entity\Sonde", mappedBy="webSite", cascade={"persist", "remove"})*/private $sondes;/*** @var Oro\Bundle\OrganizationBundle\Entity\BusinessUnit** @ORM\ManyToOne(targetEntity="Oro\Bundle\OrganizationBundle\Entity\BusinessUnit", cascade={"persist"})* @ORM\JoinColumn(name="business_unit_owner_id", referencedColumnName="id", onDelete="SET NULL")* @ConfigField(* defaultValues={* "importexport"={* "excluded"=true* }* }* )*/protected $owner;/*** @var Oro\Bundle\OrganizationBundle\Entity\Organization** @ORM\ManyToOne(targetEntity="Oro\Bundle\OrganizationBundle\Entity\Organization")* @ORM\JoinColumn(name="organization_id", referencedColumnName="id", onDelete="SET NULL")*/protected $organization;/*** Constructor*/public function __construct() {parent::__construct();$this->sondes = new \Doctrine\Common\Collections\ArrayCollection();}/*** Get id** @return integer*/public function getId() {return $this->id;}/*** Set name** @param string $name** @return WebSite*/public function setName($name) {$this->name = $name;return $this;}/*** Get name** @return string*/public function getName() {return $this->name;}/*** Set url** @param string $url** @return WebSite*/public function setUrl($url) {$this->url = $url;return $this;}/*** Get url** @return string*/public function getUrl() {return $this->url;}/*** Add sonde** @param \Sinabs\MonitoringBundle\Entity\Sonde $sonde** @return WebSite*/public function addSonde(\Sinabs\MonitoringBundle\Entity\Sonde $sonde) {$this->sondes[] = $sonde;return $this;}/*** Remove sonde** @param \Sinabs\MonitoringBundle\Entity\Sonde $sonde*/public function removeSonde(\Sinabs\MonitoringBundle\Entity\Sonde $sonde) {$this->sondes->removeElement($sonde);}/*** Get sondes** @return \Doctrine\Common\Collections\Collection*/public function getSondes() {return $this->sondes;}/*** Set owner** @param \Oro\Bundle\OrganizationBundle\Entity\BusinessUnit $owner** @return WebSite*/public function setOwner(\Oro\Bundle\OrganizationBundle\Entity\BusinessUnit $owner = null) {$this->owner = $owner;return $this;}/*** Get owner** @return \Oro\Bundle\OrganizationBundle\Entity\BusinessUnit*/public function getOwner() {return $this->owner;}}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160<?phpnamespace Sinabs\MonitoringBundle\Entity;use Doctrine\ORM\Mapping as ORM;use Sinabs\MonitoringBundle\Model\ExtendSonde;use Oro\Bundle\EntityConfigBundle\Metadata\Annotation\Config;use Oro\Bundle\EntityConfigBundle\Metadata\Annotation\ConfigField;/*** Sonde** @ORM\Table(name="sonde")* @ORM\Entity(repositoryClass="Sinabs\MonitoringBundle\Entity\SondeRepository")* @Config(* defaultValues={* "entity"={* "label"="Sonde",* "plural_label"="Sondes"* },* "security"={* "type"="ACL",* "permissions"="All"* },* "ownership"={* "owner_type"="BUSINESS_UNIT",* "owner_field_name"="owner",* "owner_column_name"="business_unit_owner_id",* "organization_field_name"="organization",* "organization_column_name"="organization_id"* }* }* )**/class Sonde extends ExtendSonde {/*** @var integer** @ORM\Column(name="id", type="integer")* @ORM\Id* @ORM\GeneratedValue(strategy="AUTO")*/private $id;/*** @var string** @ORM\Column(name="url", type="string", length=255)*/private $url;/*** @var Sinabs\MonitoringBundle\Entity\WebSite** @ORM\ManyToOne(targetEntity="Sinabs\MonitoringBundle\Entity\WebSite", inversedBy="sondes")* @ORM\JoinColumn(nullable=false)*/private $webSite;/*** @var Oro\Bundle\OrganizationBundle\Entity\BusinessUnit** @ORM\ManyToOne(targetEntity="Oro\Bundle\OrganizationBundle\Entity\BusinessUnit", cascade={"persist"})* @ORM\JoinColumn(name="business_unit_owner_id", referencedColumnName="id", onDelete="SET NULL")* @ConfigField(* defaultValues={* "importexport"={* "excluded"=true* }* }* )*/protected $owner;/*** @var Oro\Bundle\OrganizationBundle\Entity\Organization** @ORM\ManyToOne(targetEntity="Oro\Bundle\OrganizationBundle\Entity\Organization")* @ORM\JoinColumn(name="organization_id", referencedColumnName="id", onDelete="SET NULL")*/protected $organization;/*** Get id** @return integer*/public function getId() {return $this->id;}/*** Set url** @param string $url** @return Sonde*/public function setUrl($url) {$this->url = $url;return $this;}/*** Get url** @return string*/public function getUrl() {return $this->url;}/*** Set webSite** @param \Sinabs\MonitoringBundle\Entity\WebSite $webSite** @return Sonde*/public function setWebSite(\Sinabs\MonitoringBundle\Entity\WebSite $webSite) {$this->webSite = $webSite;return $this;}/*** Get webSite** @return \Sinabs\MonitoringBundle\Entity\WebSite*/public function getWebSite() {return $this->webSite;}/*** Set owner** @param \Oro\Bundle\OrganizationBundle\Entity\BusinessUnit $owner** @return Sonde*/public function setOwner(\Oro\Bundle\OrganizationBundle\Entity\BusinessUnit $owner = null) {$this->owner = $owner;return $this;}/*** Get owner** @return \Oro\Bundle\OrganizationBundle\Entity\BusinessUnit*/public function getOwner() {return $this->owner;}}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455<?phpnamespace Sinabs\MonitoringBundle\Migrations\Schema\v1_0;use Doctrine\DBAL\Schema\Schema;use Oro\Bundle\EntityExtendBundle\Migration\Extension\ExtendExtension;use Oro\Bundle\EntityExtendBundle\Migration\Extension\ExtendExtensionAwareInterface;use Oro\Bundle\EntityExtendBundle\EntityConfig\ExtendScope;use Oro\Bundle\MigrationBundle\Migration\Migration;use Oro\Bundle\MigrationBundle\Migration\QueryBag;class OroCRMAccountMigration implements Migration, ExtendExtensionAwareInterface {protected $webSites;/*** @inheritdoc*/public function setExtendExtension(ExtendExtension $extendExtension) {$this->webSites = $extendExtension;}/*** @inheritdoc*/public function up(Schema $schema, QueryBag $queries) {$webSites = $this->webSites;/** extend table orocrm_account * */$table = $schema->getTable('orocrm_account');/*** define and add our custom fields*/$webSites->addOneToManyRelation($schema,$table, // owning side table'webSites', // owning side field name'website', // target side table['name'], // column names are used to show a title of related entity['name'], // column names are used to show detailed info about related entity['name'], // Column names are used to show related entity in a grid['extend' => ['owner' => ExtendScope::OWNER_CUSTOM]]);$webSites->addOneToManyInverseRelation($schema,$table, // owning side table'webSites', // owning side field name'website', // target side table'account', // target side field name'name', // column name is used to show related entity['extend' => ['owner' => ExtendScope::OWNER_CUSTOM]]);}}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647<?phpnamespace Sinabs\MonitoringBundle\Form;use Symfony\Component\Form\AbstractType;use Symfony\Component\Form\FormBuilderInterface;use Symfony\Component\OptionsResolver\OptionsResolverInterface;class WebSiteType extends AbstractType {/*** @param FormBuilderInterface $builder* @param array $options*/public function buildForm(FormBuilderInterface $builder, array $options) {$builder->add('name','text')->add('url', 'url')->add('account', 'entity', array('label' => 'account','class' => 'OroCRMAccountBundle:Account','data_class' => '\OroCRM\Bundle\AccountBundle\Entity\Account','choice_label' => 'name','multiple' => false,'expanded' => true));}/*** @param OptionsResolverInterface $resolver*/public function setDefaultOptions(OptionsResolverInterface $resolver) {$resolver->setDefaults(array('data_class' => 'Sinabs\MonitoringBundle\Entity\WebSite','cascade_validation' => true));}/*** @return string*/public function getName() {return 'sinabs_monitoringbundle_website';}}1234567891011121314151617181920212223242526272829303132333435363738394041424344454647<?phpnamespace Sinabs\MonitoringBundle\Form;use Symfony\Component\Form\AbstractType;use Symfony\Component\Form\FormBuilderInterface;use Symfony\Component\OptionsResolver\OptionsResolverInterface;class SondeType extends AbstractType{/*** @param FormBuilderInterface $builder* @param array $options*/public function buildForm(FormBuilderInterface $builder, array $options){$builder->add('url', 'url')->add('website', 'entity', array('label' => 'website','class' => 'SinabsMonitoringBundle:WebSite','data_class' => '\Sinabs\MonitoringBundle\Entity\WebSite','choice_label' => 'name','multiple' => false,'expanded' => true));}/*** @param OptionsResolverInterface $resolver*/public function setDefaultOptions(OptionsResolverInterface $resolver){$resolver->setDefaults(array('data_class' => 'Sinabs\MonitoringBundle\Entity\Sonde'));}/*** @return string*/public function getName(){return 'sinabs_monitoringbundle_sonde';}}For the moment I think I will abandonned migration solution to a common unidirectionnal relationship, but if you have a solution, i am interesting.
The forum ‘OroCRM – Programming Questions’ is closed to new topics and replies.