我使用的是带有条令2的Zend Framework 2。
在我正在开发的应用程序中,我得到了两个不同名称空间下的实体:
- 系统\用户\实体\用户
- 应用程序\应用程序\时间表\实体\工作日志
在ApplicationAppsTimesheetEntityWorklog
中,每个工作日志都有一个用户,因为实体位于不同命名空间下的不同模块中,所以我想在工作日志实体中存储一个单向的用户关系。
目前,我正在使用以下结构来存储Worklog和用户之间的关系。
class Worklog
{
/**
* Worklog Identifier.
*
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
* @ORMColumn(type="integer")
* @var integer
* @access protected
*/
protected $id;
/**
* User who logged the work
*
* @ORMManyToMany(targetEntity="ApplicationAppsTimesheetEntityUser",cascade={"persist", "remove"})
* @ORMJoinTable(name="timesheet_worklog_user",
* joinColumns={@ORMJoinColumn(name="worklog_id", referencedColumnName="id")},
* inverseJoinColumns={@ORMJoinColumn(name="user_id", referencedColumnName="id")}
* )
* @var object
* @access protected
*/
protected $user;
}
尽管这种方法的问题是,它将关系存储在不同的表中,但我想知道是否可以将用户关系存储在具有列user_id
的同一个worklog
表中,有人能在这里给我一些指针吗?
这是我正在使用的代码:
namespace SystemUserEntity;
/**
* User class.
*
* @ORMEntity
* @ORMTable(name="system_user")
*/
class User
{
/**
* User Identifier
*
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
* @ORMColumn(type="integer")
* @var integer
* @access protected
*/
protected $id;
/**
* Full name of the user.
*
* @ORMColumn(type="string", nullable=false, length=255)
* @var string
* @access protected
*/
protected $name;
/**
* User email.
*
* @ORMColumn(type="string", nullable=false, length=255)
* @var string
* @access protected
*/
protected $email;
}
namespace ApplicationAppsTimesheetEntity;
/**
* User Worklog.
*
* @ORMEntity
* @ORMTable(name="timesheet_worklog")
*/
class Worklog
{
/**
* Worklog Identifier.
*
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
* @ORMColumn(type="integer")
* @var integer
* @access protected
*/
protected $id;
/**
* Start Time
*
* @ORMColumn(name="start_time", nullable=false, type="datetime")
* @var DateTime Object
* @access protected
*/
protected $startTime;
/**
* End time.
*
* @ORMColumn(name="end_time", nullable=false, type="datetime")
* @var DateTime Object
* @access protected
*/
protected $endTime;
/**
* User who logged the work
*
* @ORMManyToMany(targetEntity="ApplicationAppsTimesheetEntityUser",cascade={"persist", "remove"})
* @ORMJoinTable(name="timesheet_worklog_user",
* joinColumns={@ORMJoinColumn(name="worklog_id", referencedColumnName="id")},
* inverseJoinColumns={@ORMJoinColumn(name="user_id", referencedColumnName="id")}
* )
* @var object
* @access protected
*/
protected $user;
}
谢谢。
对于任何有类似问题的人,我通过更改来解决这个问题
/**
* User who logged the work
*
* @ORMManyToMany(targetEntity="ApplicationAppsTimesheetEntityUser",cascade={"persist", "remove"})
* @ORMJoinTable(name="timesheet_worklog_user",
* joinColumns={@ORMJoinColumn(name="worklog_id", referencedColumnName="id")},
* inverseJoinColumns={@ORMJoinColumn(name="user_id", referencedColumnName="id")}
* )
* @var object
* @access protected
*/
protected $user;
至
/**
* User who logged the work
*
* @ORMManyToOne(targetEntity="SystemUserEntityUser",cascade={"persist", "remove"})
* @var object
* @access protected
*/
protected $user;
感谢@Cerad为我们指明了正确的方向。