2016-02-03 3 views
0

У меня есть сценарий, в котором таблицы сотрудников и организаций отображаются в отдельной таблице с именем org_employees.Doctrine2 Вставьте данные в таблицы Join или таблицу сопоставления

У меня нет проблем с добавлением строк таблицы сотрудников и организационных таблиц отдельно, но мой вопрос заключается в том, как добавить записи для таблицы org_employees. Мне нужно создать отдельный объект для таблицы org_employees, если да, как происходит отношение ORM. Можете ли вы кого-нибудь направить меня на это.

Employee Entity:

<?php 
namespace Employee\Entity; 
use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 
use Library\Entity\BaseEntity; 

/** 
* @ORM\Entity 
* @ORM\Table(name="employees") 
*/ 
class Employee extends BaseEntity{ 

    /** 
    * @ORM\Column(name="employee_code", type="string") 
    * @var string 
    */ 
    protected $empCode;  

    public function getEmpCode() { 
     return $this->empCode; 
    } 

    public function setEmpCode($empCode) { 
     $this->empCode = $empCode; 
     return $this; 
    } 

    public function __toString() { 
     return __CLASS__ . ": [id: {$this->id}, name: {$this->name}]"; 
    } 
} 

Organization Entity:

<?php 

namespace Organization\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\ORM\Mapping as ORM; 
use Library\Entity\BaseEntity; 

/** 
* @ORM\Entity 
* @ORM\Table(name="organizations") 
*/ 
class Organization extends BaseEntity{ 

    /** 
    * @ORM\Column(name="name", type="string") 
    * @var string 
    */ 
    protected $name; 

    public function getName() { 
     return $this->name; 
    } 

    public function setName($name) { 
     $this->name = $name; 
    } 

    public function __toString() { 
     return __CLASS__ . ": [id: {$this->id}, name: {$this->name}]"; 
    } 
} 
+0

Вы, вероятно, ищете много-много отношений: http://doctrine-orm.readthedocs.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many-to-many-unidirectional – marcosh

+0

почти да, но как я могу сохранить данные – user3929758

+0

попробуйте посмотреть здесь: http://stackoverflow.com/questions/17130572/doctrine-many-to-many-insert или здесь: http://stackoverflow.com/questions/7044864/symfony2-doctrine-manytomany-relation-is-not-saved-to-database – marcosh

ответ

0

Вы можете сделать две вещи.

  1. Добавить ManyToMany отношения между Employee и Organization.
  2. Добавить дополнительный объект EmployeeOrganization(Link) между ними. Это будет означать:

    Employee - ManyToOne - EmployeeOrganization(Link) - OneToMany - Organization

Это решение также упоминается here in the doctrine documentation:

Почему многие-ко-многим ассоциаций реже? Потому что часто вы хотите связать дополнительные атрибуты с ассоциацией, и в этом случае вы вводите класс ассоциации. Следовательно, прямая ассоциация «многие-ко-многим» исчезает и заменяется ассоциациями «один-на-один-много-много-один» между 3 участвующими классами.

Первое решение является самым простым, когда дело доходит до определений сущностей, но оно позволяет вам делать привязку и не более того. Преимущество второго решения заключается в том, что вы можете добавлять дополнительные поля в свою таблицу соединений (другими словами, свойства или атрибуты для вашего объекта). Например, поле created_at, которое сообщает вам, когда сотрудник был добавлен в организацию.

Если дополнительные свойства не нужны, вы можете сделать с ManyToMany.

О том, как определить эти отношения, я хотел бы обратиться к документации или другому стеклу переполнения вопросов, информации там достаточно.

+0

Второе решение - необходимое решение для меня, потому что у меня есть сценарий дополнительных столбцов в моей таблице ссылок. – user3929758

+0

Можете ли вы посоветовать мне первое решение? некоторые ссылки, как это сделать? Я должен добавить. Удалить несколько строк в сопоставленных таблицах. – Volatil3

+0

@ Volatil3 Chack the docs [здесь для однонаправленного] (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping .html # many-to-many-unidirectional) или [здесь для двунаправленного] (http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#many- to-many-twoirectional) 'ManyToMany' в доктрине. Если вы не используете документы, вы можете оставить комментарий. – Wilt

Смежные вопросы