![](/img/trans.png)
[英]Symfony2 - Serialize object with relations (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.