2017-01-21 3 views
1

[Примечание] Im только обучение и учение Symfony 3.Ассоциация Mapping Не Рабочая доктрина использованием Symfony

Спросите: Что бы отношение к моей доктрине, если:

Company У меня есть сущность, и я хочу связать это до Sub_agent объекта.

Пользователь будет выполнять добавление/изменение/удаление из моего объекта Company, то же самое касается моего объекта Sub_agent. В моей форме Sub_agent есть выпадающий список для Company, где пользователь должен выбрать, чтобы связать sub_agent с компанией.

Company Entity

------------- 
| id | name | 
-------------- 
| 1 | ABCD | 
| 2 | EFGH | 
------------- 

Sub-Agent Entity

------------------------------------ 
| id | sub_agent_name | company_id | 
------------------------------------- 
| 1 | ABAKADA  | 1   | 
| 2 | EGAHA   | 2   | 
------------------------------------ 

записи пользователя: субагент стол

---------------------- 
id | Name | Company| 
----------------------- 
1 | ABAKADA | ABCD | 
2 | EGAHA | EFGH | 
----------------------  

То, что я есть,

UPDATE МОЙ КОД

субагент Entity

namespace SwipeBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 


/** 
* Sub_agent 
* 
* @ORM\Table(name="sub_agent") 
* @ORM\Entity(repositoryClass="SwipeBundle\Repository\Sub_agentRepository") 
*/ 
class Sub_agent 
{ 

    /** 
    * Many Sub-agents have One Company. 
    * @ORM\ManyToOne(targetEntity="Company", inversedBy="sub_agent") 
    * @ORM\JoinColumn(name="company_id", referencedColumnName="id") 
    */ 
    private $companyId; 

    /** 
    * @var int 
    * 
    * @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; 



    /** 
    * Get id 
    * 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Sub_agent 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 

    /** 
    * Set companyId 
    * 
    * @param string $companyId 
    * 
    * @return Sub_agent 
    */ 
    public function setCompanyId($companyId) 
    { 
     $this->companyId = $companyId; 

     return $this; 
    } 

    /** 
    * Get companyId 
    * 
    * @return string 
    */ 
    public function getCompanyId() 
    { 
     return $this->companyId; 
    } 

} 

Компания Entity

namespace SwipeBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Company 
* 
* @ORM\Table(name="company") 
* @ORM\Entity(repositoryClass="SwipeBundle\Repository\CompanyRepository") 
* @ORM\HasLifecycleCallbacks() 
*/ 

class Company 
{ 

    /** 
    * @ORM\OneToMany(targetEntity="Sub_agent", mappedBy="companyId") 
    */ 
    protected $sub_agent; 

    /** 
    * @var int 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    private $id; 

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

    /** 
    * Get id 
    * 
    * @return int 
    */ 
    public function getId() 
    { 
     return $this->id; 
    } 

    /** 
    * Set name 
    * 
    * @param string $name 
    * 
    * @return Company 
    */ 
    public function setName($name) 
    { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return string 
    */ 
    public function getName() 
    { 
     return $this->name; 
    } 
} 

ответ

0

Вам нужно импортировать отображение следующим образом:

use Doctrine\ORM\Mapping as ORM; 

А затем измените $ компании аннотацию так:

/** 
* One Sub-agent has One Company. 
* @ORM\OneToOne(targetEntity="Company", inversedBy="sub_agent") 
* @ORM\JoinColumn(name="company_id", referencedColumnName="id") 
*/ 
private $company; 

Попробуйте это, я думаю, он должен работать.

EDIT # 2 - основанный на комментариях.

добавить такое же использование заявление ваша компания Сущности, а также добавить это:

/** 
* @ORM\OneToOne(targetEntity="Sub_agent", mappedBy="company") 
*/ 
protected $sub_agent; 

Казаться документация Учение не является правильным. Я попробовал то же, что и раньше, и получил ошибки.

EDIT # 3:

Вам нужно добавить:

use Doctrine\Common\Collections\ArrayCollection; 

Для компании Entity, а также застройщик:

public function __construct() { 
    $this->sub_agent = new ArrayCollection(); 
} 

Изменение $companyId обратно $company. Ты не понял меня. Вам нужны сеттера и добытчики для получения настройки Sub_agents в компанию, как так:

/** 
* Set sub_agent 
* 
* @param \SwipeBundle\Entity\Sub_agent $subAgent 
* 
* @return Application 
*/ 
public function setSubAgent(\SwipeBundle\Entity\Sub_agent $subAgent = null) 
{ 
    $this->sub_agent = $subAgent; 

    return $this; 
} 

/** 
* Get sub_agent 
* 
* @return \SwipeBundle\Entity\Sub_agent 
*/ 
public function getSubAgent() 
{ 
    return $this->sub_agent; 
} 
+0

До сих пор не работает, я обновить свой код выше и поместить свой код, я обновляю также ошибку я сталкиваюсь. – phpmeter

+0

Я обновляю свой код снова, ту же ошибку: '[Doctrine \ DBAL \ Exception \ DriverException] Исключение произошло при выполнении 'ALTER TABLE sub_agent ADD CONSTRAINT FK_CACFF824979B1AD6 FOREIGN KEY (company_id) ССЫЛКИ company (id)': SQLSTATE [HY000] : Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа ' – phpmeter

+0

Hi То же, что и ошибка; Я также обновляю свой код так же, как вы сказали. Благодарю вас, '[Doctrine \ DBAL \ Exception \ DriverException] Исключение произошло при выполнении 'ALTER TABLE sub_agent ADD CONSTRAINT FK_CACFF824979B1AD6 FOREIGN KEY (company_id) ССЫЛКИ company (id)': SQLSTATE [HY000]: Общая ошибка: 1215 Невозможно добавить ограничение внешнего ключа' – phpmeter

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