[注意]我只是学习教义和symfony 3.
问:如果符合以下条件,我的学说会有什么关系:
我有Company
个实体,我想将它与Sub_agent
实体相关联。
用户将从我的Company
实体执行添加/编辑/删除,同样适用于我的Sub_agent
实体。在我的Sub_agent
表单中,有Company
的下拉列表,用户必须选择将sub_agent与公司关联。
Company
实体
-------------
| id | name |
--------------
| 1 | ABCD |
| 2 | EFGH |
-------------
Sub-Agent
实体
------------------------------------
| id | sub_agent_name | company_id |
-------------------------------------
| 1 | ABAKADA | 1 |
| 2 | EGAHA | 2 |
------------------------------------
用户记录:子代理表
----------------------
id | Name | Company|
-----------------------
1 | ABAKADA | ABCD |
2 | EGAHA | EFGH |
----------------------
我做的是,
更新我的代码
子代理实体
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;
}
}
公司实体
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 :(得分:0)
您需要像这样导入映射:
use Doctrine\ORM\Mapping as ORM;
然后改变你的$ company注释:
/**
* One Sub-agent has One Company.
* @ORM\OneToOne(targetEntity="Company", inversedBy="sub_agent")
* @ORM\JoinColumn(name="company_id", referencedColumnName="id")
*/
private $company;
尝试一下,我认为它应该有用。
编辑#2 - 基于评论。
向公司实体添加相同的使用声明,并添加:
/**
* @ORM\OneToOne(targetEntity="Sub_agent", mappedBy="company")
*/
protected $sub_agent;
似乎Doctrine文档不正确。我和你之前的尝试一样,也遇到了错误。
编辑#3:
您需要添加:
use Doctrine\Common\Collections\ArrayCollection;
致公司实体,以及构造函数:
public function __construct() {
$this->sub_agent = new ArrayCollection();
}
将$companyId
更改回$company
。你误解我了。
您需要setter和getter才能将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;
}