我如何使用教义来创建独特的关系?
Posted
技术标签:
【中文标题】我如何使用教义来创建独特的关系?【英文标题】:How can I use doctrine to create unique relation? 【发布时间】:2020-01-14 09:33:20 【问题描述】:我有 3 张桌子:
table 'user'
- id
- name
table 'task'
- id
- name
table 'report'
- id
- comment
我需要在表“task”、“report”和“user”之间创建关系,该报告有一个唯一字段“user_id”和“task_id”,但该“report”将包含许多用户和任务。
如何通过Doctrine实现?
【问题讨论】:
查看学说的关联映射。 doctrine-project.org/projects/doctrine-orm/en/2.6/reference/… 【参考方案1】:一定是这样的:
用户->报告 OneToMany 任务->报告 OneToMany 报告->用户多对一 报告->多对一任务 带有 ID、用户、任务字段的报告中的 UniqueConstraint关系:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/association-mapping.html#one-to-many-bidirectional
对于 UniqueConstraint:https://www.doctrine-project.org/projects/doctrine-orm/en/2.6/reference/annotations-reference.html#uniqueconstraint
我没有测试代码...
/**
* @Doctrine\ORM\Mapping\Entity()
* @Doctrine\ORM\Mapping\Table(name="user")
*/
class User
/**
* @Doctrine\ORM\Mapping\Id
* @Doctrine\ORM\Mapping\Column(type="integer")
* @Doctrine\ORM\Mapping\GeneratedValue
*/
protected $id;
/**
* @Doctrine\ORM\Mapping\Column(type="text")
*/
protected $name;
/**
* @Doctrine\ORM\Mapping\OneToMany(targetEntity="Report", mappedBy="user")
*/
protected $reports;
public function __construct()
$this->reports = new \Doctrine\Common\Collections\ArrayCollection();
// addReport, removeReport, Getters and setters
/**
* @Doctrine\ORM\Mapping\Entity()
* @Doctrine\ORM\Mapping\Table(name="task")
*/
class Task
/**
* @Doctrine\ORM\Mapping\Id
* @Doctrine\ORM\Mapping\Column(type="integer")
* @Doctrine\ORM\Mapping\GeneratedValue
*/
protected $id;
/**
* @Doctrine\ORM\Mapping\Column(type="text")
*/
protected $name;
/**
* @Doctrine\ORM\Mapping\OneToMany(targetEntity="Report", mappedBy="task")
*/
protected $reports;
public function __construct()
$this->reports = new \Doctrine\Common\Collections\ArrayCollection();
// addReport, removeReport, Getters and setters
/**
* @Doctrine\ORM\Mapping\Entity()
* @Doctrine\ORM\Mapping\Table(name="report",uniqueConstraints=
* @Doctrine\ORM\Mapping\UniqueConstraint(name="report_user_task_idx", columns="id", "user", "task")
* )
*/
class Report
/**
* @Doctrine\ORM\Mapping\Id
* @Doctrine\ORM\Mapping\Column(type="integer")
* @Doctrine\ORM\Mapping\GeneratedValue
*/
protected $id;
/**
* @Doctrine\ORM\Mapping\Column(type="text")
*/
protected $comment;
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="reports")
*/
protected $user;
/**
* @ORM\ManyToOne(targetEntity="Task", inversedBy="reports")
*/
protected $task;
// Getters and setters
【讨论】:
以上是关于我如何使用教义来创建独特的关系?的主要内容,如果未能解决你的问题,请参考以下文章