내 코드를 실행하기 위해 약 2 주 이후로 노력하고 있습니다.
데이터베이스 구조 (단순화) :
테이블 사용자 | 아이디 | 사용자 이름 |
테이블 작업 | 아이디 | 작업 제목 | 작업 유형 | 사용자
테이블 작업 유형 | 아이디 | 작업 유형 제목 |
테이블 작업 완료 | 아이디 | 작업 ID | 사용자 ID
내가 원하는 것 :
태스크를 추가하고 태스크가 글로벌 (모든 사용자에게 표시됨)인지 또는 태스크가 한 명의 사용자에게만 표시되는지 (전역 또는 User-ID가 테이블 "Tasks"의 테이블 필드 "User"에 입력 됨) 선택합니다.
작업을 "완료"로 표시 한 경우 작업 ID와 사용자 ID를 사용하여 "작업 완료"테이블에 항목을 만들고 싶습니다 (사용자 ID의 값은 항목이 완료된 페이지에서 가져 오며 일반적으로 동일한 값입니다. "작업"필드 "USER"에서와 같이 작업이 "글로벌"작업 인 경우 "작업 완료"테이블의 "USER ID"값은 "글로벌"이 될 수 없지만 사용자의 ID는 이 작업을 수행하고 있습니다.
나는 다 대다, 일대 다 등으로 여러 가지 방법을 시도했습니다. 하지만 항상 오류가 발생합니다. 누군가 나를 도울 수 있습니까? "ID"필드의 테이블 필드 이름에 몇 가지 문제가있을 수 있다는 것을 읽었습니다.
누군가 데이터베이스 구조 / 엔티티를 설정하는 방법을 알려줄 수 있습니다. 많은 도움이 될 것입니다!
감사합니다, Marvin
편집 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"테이블에 task_id 파일이 생성되고 "Task Done"테이블에 생성하려고합니다. 이 문제를 해결하려면 태스크 엔터티에 OnetoMany를 배치하고 TaskDone에 ManyToOne을 배치해야합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다