我正在使用Zend Framework 2和Doctrine 2开发我的应用程序.
虽然书面方式说明,我无法理解之间的差异mappedBy和inversedBy.
我应该什么时候使用mappedBy?
我应该什么时候使用inversedBy?
我什么时候不用?
这是一个例子:
/**
*
* @ORM\OneToOne(targetEntity="\custMod\Entity\Person", mappedBy="customer")
* @ORM\JoinColumn(name="personID", referencedColumnName="id")
*/
protected $person;
/**
*
* @ORM\OneToOne(targetEntity="\Auth\Entity\User")
* @ORM\JoinColumn(name="userID", referencedColumnName="id")
*/
protected $user;
/**
*
* @ORM\ManyToOne (targetEntity="\custMod\Entity\Company", inversedBy="customer")
* @ORM\JoinColumn (name="companyID", referencedColumnName="id")
*/
protected $company;
Run Code Online (Sandbox Code Playgroud)
我做了一个快速搜索,发现了以下内容,但我仍感到困惑:
我在两个实体A和B之间有多对多的关系.
所以加入表单时,为了增加entityA对entityB,我做了以下内容:
$builder
->add('entityAs', 'entity', array(
'class' => 'xxxBundle:EntityA',
'property' => 'name',
'multiple' => true,
));}
Run Code Online (Sandbox Code Playgroud)
一切都很好.
但是根据entityA的字段类型,我想有时将'multiple'设置为false,所以我正在做以下事情:
if($type=='a'){
$builder
->add('entityAs', 'entity', array(
'class' => 'xxxBundle:entityA',
'property' => 'name',
'multiple' => true,
));}
else {
$builder
->add('entityAs', 'entity', array(
'class' => 'xxxBundle:entityA',
'property' => 'name',
'multiple' => false,
));
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
Catchable Fatal Error: Argument 1 passed to Doctrine\Common\Collections\ArrayCollection::__construct() must be an array, object given, called in C:\wamp\www\Symfony\vendor\doctrine\orm\lib\Doctrine\ORM\UnitOfWork.php on line 519 and defined in C:\wamp\www\Symfony\vendor\doctrine\common\lib\Doctrine\Common\Collections\ArrayCollection.php line …Run Code Online (Sandbox Code Playgroud)