Doctrine2 - Unidirectional ManyToOne



我使用的是带有条令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为我们指明了正确的方向。

最新更新