0
我使用Zend框架2學說2.Doctrine2 - 單向多對一
在我正在開發的應用程序,我得到了不同的命名空間下2個實體:
- 系統\用戶\實體\用戶
- 應用\ APPS \時間表\實體\工作日誌
在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;
}
雖然這項工作,發出帶有這種方法,它存儲在不同的表之間的關係,我想知道如果它是可以存儲用戶關係在同一worklog
表列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;
}
謝謝。
爲什麼使用ManyToMany關係而不是ManyToOne? ManyToMany是導致生成連接表的原因。 – Cerad 2015-02-23 17:13:15
這確實很奇怪,但這是教條主義如何推薦的,查看這個鏈接http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html#one-to-many -un-directional-with-join-table – 2015-02-23 17:21:57
@Cerad,你指出我正確的方向,它的工作原理,謝謝:) – 2015-02-23 17:45:26