Aur*_*nas 3 many-to-many symfony doctrine-orm
我有两个实体User和Group具有关系ManyToMany.关系创建为user_group具有两列user_id和的分隔表(称为)group_id.
我想再addedOn TIMESTAMP DEFAULT CURRENT_TIMESTAMP 向表中添加一个字段user_group.我不在乎该学说不会看到这个专栏,我可以在需要时通过SQL选择它.
这可以通过学说配置来完成吗?如果有,怎么样?我知道我可以在DB中添加列,但每次生成迁移diff时都会有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;
Run Code Online (Sandbox Code Playgroud)
不,您不能,ManyToMany在您的联结表中有关联和附加列,您需要重写您的映射,以便在您的用户和组实体之间建立一个联结实体,如下所示
对于用户,您的映射将是
OneToMany
------------>
User UserHasGroups
<------------
ManyToOne
Run Code Online (Sandbox Code Playgroud)
对于组实体也是如此
OneToMany
----------->
Group UserHasGroups
<-----------
ManyToOne
Run Code Online (Sandbox Code Playgroud)
现在您可以将实体设置为
/**
* 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;
}
Run Code Online (Sandbox Code Playgroud)
/**
* 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;
}
Run Code Online (Sandbox Code Playgroud)
/**
* 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');
}
}
Run Code Online (Sandbox Code Playgroud)
现在您已经映射了您的实体,您可以让您的UserHasGroups实体使用存储库方法,提供用户和组值findBy,findAll等,或者如果您有用户对象,那么您可以直接获取UserHasGroups包含该用户的关联集合的对象
| 归档时间: |
|
| 查看次数: |
3835 次 |
| 最近记录: |