Doctrine2 - 单向多对一

Doctrine2 - Unidirectional ManyToOne

我正在使用 Zend-Framework 2 和 Doctrine 2。

在我正在开发的应用程序中,我在不同的命名空间下得到了 2 个实体:

Application\Apps\Timesheet\Entity\Worklog中,每个工作日志都有一个用户,由于实体驻留在不同命名空间下的不同模块中,我想在工作日志实体中存储单向用户关系。

目前我正在使用以下结构来存储Worklog和用户之间的关系。

class Worklog
{
     /**
     * Worklog Identifier.
     *
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     * @var integer
     * @access protected
     */
    protected $id;

    /**
     * User who logged the work
     *
     * @ORM\ManyToMany(targetEntity="Application\Apps\Timesheet\Entity\User",cascade={"persist", "remove"})
     * @ORM\JoinTable(name="timesheet_worklog_user",
     *      joinColumns={@ORM\JoinColumn(name="worklog_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
     * )
     * @var object
     * @access protected
     */
    protected $user;
}

虽然这项工作,但这种方法的问题是,它将关系存储在不同的 table,我想知道是否可以将用户关系存储在相同的 worklog table 有一个列 user_id,有人可以在这里给我一些指示吗?

这是我使用的代码:

namespace System\User\Entity;
/**
 * User class.
 *
 * @ORM\Entity
 * @ORM\Table(name="system_user")
 */
class User
{
     /**
     * User Identifier
     *
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     * @var integer
     * @access protected
     */
    protected $id;

    /**
     * Full name of the user.
     *
     * @ORM\Column(type="string", nullable=false, length=255)
     * @var string
     * @access protected
     */
    protected $name;

    /**
     * User email.
     *
     * @ORM\Column(type="string", nullable=false, length=255)
     * @var string
     * @access protected
     */
    protected $email;
}

namespace Application\Apps\Timesheet\Entity;
/**
 * User Worklog.
 *
 * @ORM\Entity
 * @ORM\Table(name="timesheet_worklog")
 */
class Worklog
{
     /**
     * Worklog Identifier.
     *
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     * @var integer
     * @access protected
     */
    protected $id;

     /**
     * Start Time
     *
     * @ORM\Column(name="start_time", nullable=false, type="datetime")
     * @var DateTime Object
     * @access protected
     */
    protected $startTime;

    /**
     * End time.
     *
     * @ORM\Column(name="end_time", nullable=false, type="datetime")
     * @var DateTime Object
     * @access protected
     */
    protected $endTime;

    /**
     * User who logged the work
     *
     * @ORM\ManyToMany(targetEntity="Application\Apps\Timesheet\Entity\User",cascade={"persist", "remove"})
     * @ORM\JoinTable(name="timesheet_worklog_user",
     *      joinColumns={@ORM\JoinColumn(name="worklog_id", referencedColumnName="id")},
     *      inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
     * )
     * @var object
     * @access protected
     */
    protected $user;
}

谢谢。

对于遇到类似问题的任何人,我通过更改解决了这个问题

/**
 * User who logged the work
 *
 * @ORM\ManyToMany(targetEntity="Application\Apps\Timesheet\Entity\User",cascade={"persist", "remove"})
 * @ORM\JoinTable(name="timesheet_worklog_user",
 *      joinColumns={@ORM\JoinColumn(name="worklog_id", referencedColumnName="id")},
 *      inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
 * )
 * @var object
 * @access protected
 */
protected $user;

/**
 * User who logged the work
 *
 * @ORM\ManyToOne(targetEntity="System\User\Entity\User",cascade={"persist", "remove"})
 * @var object
 * @access protected
 */
protected $user;

感谢@Cerad 指出正确的方向。