php - Symfony2, one-to-many relation, creating new task with automatic new category -


i'm trying create new task , task assign pre-created categories. problem is, after submit form, automatically create new category same name, selected in category list, , symfony creates new relation them. just want assign category id task object, no create new category. here task object:

<?php  namespace acme\taskbundle\entity;  use doctrine\orm\mapping orm; use symfony\component\validator\constraints assert;  /**  * @orm\entity  * @orm\table(name="tasks")   */ class task {     /**      * @orm\id      * @orm\column(type="integer")      * @orm\generatedvalue(strategy="auto")      */     protected $id;                    /**      * @orm\column(type="string", length=200)          * @assert\notblank(      *      message = "task cannot empty"            * )          * @assert\length(      *      min = "3",      *      minmessage = "task short"               * )           */          protected $task;      /**      * @orm\column(type="datetime")          * @assert\notblank()      * @assert\type("\datetime")      */     protected $duedate;      /**      * @assert\true(message = "you need agree")          */              protected $accepted;      /**      * @orm\manytoone(targetentity="category", inversedby="tasks", cascade={"persist"})      * @orm\joincolumn(name="category_id", referencedcolumnname="id")                              */     protected $category;              public function gettask()     {         return $this->task;     }      public function settask($task)     {         $this->task = $task;     }      public function getduedate()     {         return $this->duedate;     }      public function setduedate(\datetime $duedate = null)     {         $this->duedate = $duedate;     }      public function getaccepted()     {         return $this->accepted;     }      public function setaccepted($accepted)     {         $this->accepted = (boolean) $accepted;     }      /**      * id      *      * @return integer       */     public function getid()     {         return $this->id;     }      /**      * set category      *      * @param \acme\taskbundle\entity\category $category      * @return task      */     public function setcategory(\acme\taskbundle\entity\category $category = null)     {         $this->category = $category;          return $this;     }      /**      * category      *      * @return \acme\taskbundle\entity\category       */     public function getcategory()     {         return $this->category;     } } 

category object:

<?php  namespace acme\taskbundle\entity;  use doctrine\orm\mapping orm; use symfony\component\validator\constraints assert;  /**  * @orm\entity  * @orm\table(name="categories")   */ class category {     /**      * @orm\id      * @orm\column(type="integer")      * @orm\generatedvalue(strategy="auto")              */     protected $id;       /**      * @orm\column(type="string", length=200)        * @assert\notnull(message="please select category", groups = {"adding"})                       */              protected $name;             /**      * id      *      * @return integer       */     public function getid()     {         return $this->id;     }      /**      * set name      *      * @param string $name      * @return category      */     public function setname($name)     {         $this->name = $name;          return $this;     }      /**      * name      *      * @return string       */     public function getname()     {         return $this->name;     }      public function __tostring()     {         return strval($this->name);     } } 

my db table task:

id | task | duedate | category_id (here creating doctrine automatic foreign keys between task , category) 

and db table categories:

id | name +-------------------+ 1 | main category 2 | second category 

and if create task, i.e. main category, add new task db , add new category db name main category. result is:

task table: +----------------------------------------+ 1 | task name | 2013-09-27 00:00:00 | 3   categories table: +--------------------+ 1 | main category 2 | second category 3 | main category 

expected results:

task table: +----------------------------------------+ 1 | task name | 2013-09-27 00:00:00 | 1   categories table: +--------------------+ 1 | main category 2 | second category 

how can fix please?

update

tasktype form:

<?php  namespace acme\taskbundle\form\type;  use symfony\component\form\abstracttype; use symfony\component\form\formbuilderinterface; use symfony\component\optionsresolver\optionsresolverinterface; use acme\taskbundle\form\type\category;  class tasktype extends abstracttype {     public function setdefaultoptions(optionsresolverinterface $resolver)     {         $resolver->setdefaults(array(             'data_class' => 'acme\taskbundle\entity\task',             'cascade_validation' => true,         ));     }      public function buildform(formbuilderinterface $builder, array $options)     {         $builder->add('task', 'text', array('label' => 'task'))                 ->add('duedate', 'date', array('label' => 'date'))                 ->add('category', new categorytype(), array('validation_groups' => array('adding')))                 ->add('accepted', 'checkbox')                 ->add('save', 'submit', array('label' => 'send'));     }      public function getname()     {         return 'task';     } } 

categorytype form:

<?php  namespace acme\taskbundle\form\type;  use symfony\component\form\abstracttype; use symfony\component\form\formbuilderinterface; use symfony\component\optionsresolver\optionsresolverinterface;  class categorytype extends abstracttype {     public function setdefaultoptions(optionsresolverinterface $resolver)     {         $resolver->setdefaults(array(             'data_class' => 'acme\taskbundle\entity\category',         ));     }      public function buildform(formbuilderinterface $builder, array $options)     {         $builder->add('name', 'entity', array(                   'class' => 'acmetaskbundle:category',                   'query_builder' => function($repository) { return $repository->createquerybuilder('c')->orderby('c.id', 'asc'); },                   'property' => 'name',                   'empty_value' => 'choose something',                   ));     }      public function getname()     {         return 'category';     } } 

first of have define unique column "name" category (orm\column) avoid db inconsistence:

class category {     [...]      /**      * @orm\column(type="string", length=200, unique=true)        * @assert\notnull(message="please select category", groups = {"adding"})                       */              protected $name;   

then add persistent category task have find , attach entity, so:

// find category $category = $this->getdoctrine()->getmanager()->getrepository('acmetaskbundle:category')->findbyname("category name");  // add task $mytask->setcategory($category); 

Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -