我有两个实体用户和组关系ManyToMany。关系创建为具有两列user_group
和user_id
的分隔表(称为group_id
)。
我想在表addedOn TIMESTAMP DEFAULT CURRENT_TIMESTAMP
中再添加一个字段user_group
。我不在乎该学说不会看到这个专栏,我可以在需要时通过SQL选择它。
可以通过学说配置来完成吗?如果有,怎么样? 我知道我可以在DB中添加列,但每次生成迁移差异时都会有SQL语句删除此列。
App:Symfony 2.5,Doctrine 2.4。
关系在配置中定义为User.php:
/**
* @ORM\ManyToMany(targetEntity="RAZ\UserBundle\Entity\Group")
* @ORM\JoinTable(name="user_group",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
* )
*/
protected $groups;
答案 0 :(得分:7)
不,你不能,在你的联结表中有ManyToMany
关联和附加列,你需要重写你的映射,以便在你的用户和组实体之间建立一个联结实体,如下所示
对于用户,您的映射将类似于
OneToMany
------------>
User UserHasGroups
<------------
ManyToOne
组实体相同
OneToMany
----------->
Group UserHasGroups
<-----------
ManyToOne
现在您可以将实体设置为
/**
* User
* @ORM\Table(name="user_table_name")
* @ORM\Entity
*/
class User
{
/**
* @ORM\OneToMany(targetEntity="NameSpace\YourBundle\Entity\UserHasGroups", mappedBy="users",cascade={"persist","remove"} )
*/
protected $hasGroups;
}
/**
* Group
* @ORM\Table(name="group_table_name")
* @ORM\Entity
*/
class Group
{
/**
* @ORM\OneToMany(targetEntity="NameSpace\YourBundle\Entity\UserHasGroups", mappedBy="groups",cascade={"persist","remove"} )
*/
protected $hasUsers;
}
/**
* UserHasGroups
* @ORM\Table(name="user_groups_table_name")
* @ORM\Entity
*/
class UserHasGroups
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\ManyToOne(targetEntity="NameSpace\YourBundle\Entity\Group", cascade={"persist"}, fetch="LAZY")
* @ORM\JoinColumn(name="group_id", referencedColumnName="id")
*/
protected $groups;
/**
* @ORM\ManyToOne(targetEntity="NameSpace\YourBundle\Entity\User", cascade={"persist","remove"} ,inversedBy="medias", fetch="LAZY" )
* @ORM\JoinColumn(name="user_id", referencedColumnName="id",nullable=true)
*/
protected $users;
/**
* @var \DateTime
* @ORM\Column(name="added_on", type="datetime")
*/
protected $addedOn;
public function __construct()
{
$this->addedOn= new \DateTime('now');
}
}
现在您已经映射了您的实体,您可以使用UserHasGroups
实体使用存储库方法,提供用户和组值,如findBy,findAll
等,或者如果您有用户对象,那么您可以直接获取{{1包含该用户的关联集合的对象