簡體   English   中英

Symfony2 ManyToMany或OneToMany還是什么?

[英]Symfony2 ManyToMany or OneToMany or what?

自大約2周以來,我一直在嘗試讓我的代碼運行。

數據庫結構(簡體):

表用戶 | ID | 用戶名|

表任務 | ID | 任務標題 任務類型|用戶

表任務類型 | ID | 任務類型標題|

表任務完成 | ID | 任務ID | 用戶身份

我想要的是:

添加一個任務,選擇任務是全局的(每個用戶可見)還是僅一個用戶可見的任務(全局或用戶ID放在表“任務”的表字段“用戶”中)。

如果我將任務標記為“完成”,我想在表“任務完成”中輸入任務ID和用戶ID(用戶ID的值來自完成輸入的頁面,通常與該值相同)就像表“任務”字段“用戶”中的表一樣,但是當任務是“全局”任務時,表“任務完成”中的“用戶ID”的值不能是“全局”,而是用戶的ID,正在執行此任務。

我嘗試了很多對很多,一對多等等的方法。 但是我總是會出錯,有人可以幫助我嗎? 我讀過,“ ID”字段的表字段名稱可能存在一些問題。

也許有人可以告訴我如何設置數據庫結構/實體。 這對我有很大幫助!

親切的問候,馬文

編輯1

在控制台中執行doctrine:schema:update --force時出錯。

[Doctrine\DBALDBALException]
An exception occurred while executing 'ALTER TABLE tasks ADD CONSTRAINT
FK_50586597BF396750 FOREIGN KEY (id) REFERENCES task_done (id)':                                                                 

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`seotool`.`#sql-382_38`, CONSTRAINT `FK_50586597BF396750` FOREIGN KEY (`id`) REFERENCES `task_done` (`id`))

[PDOException]    
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`seotool`.`#sql-382_38`, CONSTRAINT `FK_50586597BF396750` FOREIGN KEY (`id`) REFERENCES `task_done` (`id`))    

代碼Task.php

<?php

 namespace Seotool\MainBundle\Entity;
 use Doctrine\Common\Collections\ArrayCollection;
 use Symfony\Component\Validator\Constraints as Assert;
 use Doctrine\ORM\Mapping as ORM;

 /**
  * @ORM\Entity
  * @ORM\Table(name="tasks")
  */
 class Task {

/**
 * @ORM\Column(type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $id;

/**
 * @ORM\Column(type="string")
 */
protected $task_title;

/**
 * @ORM\Column(type="text")
 */
protected $task_description;


/**
 * @ORM\Column(type="string")
 */
protected $task_priority;

/**
 * @ORM\ManyToOne(targetEntity="TaskTypes", inversedBy="task")
 * @ORM\JoinColumn(name="tasktype", referencedColumnName="id")
 */
protected $TaskTypes;

/**
 * @ORM\ManyToOne(targetEntity="User", inversedBy="task")
 * @ORM\JoinColumn(name="user", referencedColumnName="id")
 */
protected $User;

/**
 * @ORM\ManyToOne(targetEntity="TaskDone", inversedBy="task")
 * @ORM\JoinColumn(name="id", referencedColumnName="id")
 */
protected $TaskDone;

....

代碼TaskDone.php

<?php

 namespace Seotool\MainBundle\Entity;

 use Doctrine\Common\Collections\ArrayCollection;
 use Doctrine\ORM\Mapping as ORM;

 /**
  * @ORM\Entity
  * @ORM\Table(name="task_done")
  */
 class TaskDone
 {

/**
 * @ORM\OneToMany(targetEntity="Task", mappedBy="TaskDone")
 */
protected $task;

/**
 * @ORM\Column(type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

.....

我無法重新創建您的確切錯誤,但查看您所需的表結構,我得到了一個通過更改聯接列的名稱運行的示例...您正在要求教義創建一個用作前鍵的列,但該表已經包含一個名為id的列。 請使用類似name =“ task_ id”的名稱。

你有這個:

/**
 * @ORM\ManyToOne(targetEntity="TaskDone", inversedBy="task")
 * @ORM\JoinColumn(name="id", referencedColumnName="id")
 */
protected $TaskDone;

更改為此:

/**
 * @ORM\ManyToOne(targetEntity="TaskDone", inversedBy="task")
 * @ORM\JoinColumn(name="task_id", referencedColumnName="id")
 */
protected $TaskDone;

您也有倒退的關系。 這將在“任務”表中創建一個歸檔的task_id,而您想在“任務完成”表中創建它。 要解決此問題,您應該將OnetoMany放在任務實體上,將ManyToOne放在TaskDone中。

原則文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM