首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Doctrine2 -单向ManyToOne

Doctrine2 -单向ManyToOne
EN

Stack Overflow用户
提问于 2015-02-23 16:13:27
回答 1查看 151关注 0票数 0

我使用Zend-Framework2和Doctrine 2.

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

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

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

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

代码语言:javascript
运行
复制
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;
}

虽然,这个工作,这个方法的问题是,它将关系存储在一个不同的表中,但我想知道是否可以将用户关系存储在同一个worklog表中,其中包含一个列user_id,有人能在这里给我提供一些指针吗?

下面是我使用的代码:

代码语言:javascript
运行
复制
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;
}

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-23 17:48:39

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

代码语言:javascript
运行
复制
/**
 * 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;

代码语言:javascript
运行
复制
/**
 * User who logged the work
 *
 * @ORM\ManyToOne(targetEntity="System\User\Entity\User",cascade={"persist", "remove"})
 * @var object
 * @access protected
 */
protected $user;

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28678106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档