我正在使用Symfony 3来建立一个网站。我有一个与Users
关系的实体(OneToOne
),以便建立情侣。 (我没有其他人知道如何轻松地做到这一点)
最终目标是创建一个表单,以引用id
中其他Users
的{{1}}。所以我创建了一个couple
字段并将其分配给IntegerType
,但我无法设置它(因为没有id
)。所以我想知道是否有setId(...)
选项(在Doc / Tests中找不到),如果没有,我怎么能实现呢?
注册新夫妇的步骤应该是:
setter
)[FORM] Users
(Users
)[BDD] $userCouple = ...findOne...
,那么$couple == null
和$userCouple->setCouple($this)
所以我的$this->setCouple($userCouple)
实体看起来像是:
Users
我的表格如下:
<?php
namespace Acme\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Model\User as BaseUser;
/**
* Users
*
* @ORM\Table(name="users")
* @ORM\Entity(repositoryClass="Acme\UserBundle\Repository\UsersRepository")
*/
class Users extends BaseUser
{
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\OneToOne(targetEntity="Acme\UserBundle\Entity\Users")
* @ORM\JoinColumn(nullable=true)
*/
protected $couple;
/**
* Get id
*
* @return int
*/
public function getId()
{
return $this->id;
}
/**
* Set couple.
*
* @param \Acme\UserBundle\Entity\Users|null $couple
*
* @return Users
*/
public function setCouple(\Acme\UserBundle\Entity\Users $couple = null)
{
$this->couple = $couple;
return $this;
}
/**
* Get couple.
*
* @return \Acme\UserBundle\Entity\Users|null
*/
public function getCouple()
{
return $this->couple;
}
}
答案 0 :(得分:0)
您应该使用一对一的自引用关系解决此问题(请参阅更多here)。基本上,couple
将替换为partner
,最适合的情况是:
...
/**
* @OneToOne(targetEntity="User")
* @JoinColumn(name="partner_id", referencedColumnName="id")
*/
protected $partner;
...
然后在表单中,您可以使用EntityType
(不确定为什么要首先使用IntegerType
)并执行以下操作:
$builder->add('users', EntityType::class, array(
// query choices from this entity
'class' => 'UserBundle:User',
// use the User.username property as the visible option string
'choice_label' => 'username',
));
当然,您可以使用query_builder
选项(传递自定义查询)或choices
从您显示为可能合作伙伴的用户列表中排除您正在编辑个人资料的用户要使用的用户实体的集合(首先获取它们并过滤掉当前用户)。