Doctrine2 - 单向ManyToOne

时间:2015-02-23 16:13:27

标签: orm doctrine-orm

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

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

  • 系统\用户\实体\用户
  • 应用程序\应用\时间表\实体\工作日志

Application\Apps\Timesheet\Entity\Worklog中,每个工作日志都有一个用户,因为实体位于不同命名空间下的不同模块中,我想在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;
}

虽然,这项工作,这个方法的问题是,它将关系存储在另一个表中,我想知道是否可以将用户关系存储在具有列{{1}的同一worklog表中,有人可以在这里给我一些指针吗?

以下是我正在使用的代码:

user_id

谢谢。

1 个答案:

答案 0 :(得分:0)

对于有类似问题的人,我通过更改

解决了这个问题
/**
 * 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指向正确的方向。