Doctrine2 - 单向多对一
Doctrine2 - Unidirectional ManyToOne
我正在使用 Zend-Framework 2 和 Doctrine 2。
在我正在开发的应用程序中,我在不同的命名空间下得到了 2 个实体:
- System\User\Entity\User
- Application\Apps\Timesheet\Entity\Worklog
在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 指出正确的方向。
我正在使用 Zend-Framework 2 和 Doctrine 2。
在我正在开发的应用程序中,我在不同的命名空间下得到了 2 个实体:
- System\User\Entity\User
- Application\Apps\Timesheet\Entity\Worklog
在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 指出正确的方向。