도와주세요.symfony에서 join 컬럼에서 제기되는 문제
- 1
-
0
안녕하십니까? 심포니에서 한 테블의 컬럼을 다른 테블에서 참조(Join Column)하려는데 잘 되지 않아요.도와주세요.
코드를 알려드립니다.Entity파일입니다.
- InputStatus.php(Entity파일)
- <?php
- namespace AppBundle\Entity;
- use Doctrine\ORM\Mapping as ORM;
- use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
- /**
- * InputStatus
- *
- * @ORM\Table(name="input_status")
- * @ORM\Entity(repositoryClass="AppBundle\Repository\InputStatusRepository")
- */
- class InputStatus
- {
- //const ESTADO_INICIAL = 1;
- //const ESTADO_ALARMAS_INICIAL = 1;
- /**
- * @var int
- *
- * @ORM\Column(name="id", type="integer")
- * @ORM\Id
- * @ORM\GeneratedValue(strategy="AUTO")
- */
- private $id;
- /**
- * @ORM\ManyToOne(targetEntity="Device")
- * @ORM\JoinColumn(name="device_id", referencedColumnName="device_id")
- */
- private $deviceId;
- /**
- * @ORM\ManyToOne(targetEntity="InputWarningSetting")
- * @ORM\JoinColumn(name="input", referencedColumnName="input")
- */
- private $input;
- /**
- * @var \DateTime
- *
- * @ORM\Column(name="start_time", type="datetime")
- */
- private $startDate;
- /**
- * @var \DateTime
- *
- * @ORM\Column(name="finish_time", type="datetime")
- */
- private $finishDate;
- /**
- * Constructor
- */
- public function __construct()
- {
- }
- public function __toString(){
- //return $this->deviceId;
- }
- /**
- * Get id
- *
- * @return integer
- */
- public function getId()
- {
- return $this->id;
- }
- /**
- * Set StartDate
- *
- * @param \DateTime $startTime
- * @return InputStatus
- */
- public function setStartDate($startDate)
- {
- $this->startDate = $startDate;
- return $this;
- }
- /**
- * Get StartDate
- *
- * @return \DateTime
- */
- public function getStartDate()
- {
- return $this->startDate;
- }
- /**
- * Set FinishDate
- *
- * @param \DateTime $finishDate
- * @return InputStatus
- */
- public function setFinishDate($finishDate)
- {
- $this->finishDate = $finishDate;
- return $this;
- }
- /**
- * Get FinishDate
- *
- * @return \DateTime
- */
- public function getFinishDate()
- {
- return $this->finishDate;
- }
- /**
- * Set DeviceId
- *
- * @param \AppBundle\Entity\Device $deviceId
- * @return InputStatus
- *
- */
- public function setDeviceId(\AppBundle\Entity\Device $deviceId = null)
- {
- $this->deviceId = $deviceId;
- return $this;
- }
- /**
- * Get DeviceId
- *
- * @return \AppBundle\Entity\Device
- */
- public function getDeviceId()
- {
- return $this->deviceId;
- }
- }
- Device.php(Entity파일)
- <?php
- namespace AppBundle\Entity;
- use Doctrine\ORM\Mapping as ORM;
- use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
- /**
- * Device
- *
- * @ORM\Table(name="device_info")
- * @ORM\Entity(repositoryClass="AppBundle\Repository\DeviceRepository")
- * @UniqueEntity(
- * fields={"deviceId"},
- * message="The device id is already used."
- * )
- */
- class Device
- {
- //const ESTADO_INICIAL = 1;
- //const ESTADO_ALARMAS_INICIAL = 1;
- /**
- * @var int
- *
- * @ORM\Column(name="id", type="integer")
- * @ORM\Id
- * @ORM\GeneratedValue(strategy="AUTO")
- */
- private $id;
- /**
- * @var string
- *
- * @ORM\Column(name="device_id", type="string", length=32)
- */
- private $deviceId;
- /**
- * @var int
- *
- * @ORM\Column(name="device_status", type="integer", nullable=true)
- */
- private $deviceStatus;
- /**
- * @var string
- *
- * @ORM\Column(name="device_ref", type="string", length=64, nullable=true)
- */
- private $deviceRef;
- /**
- * @var string
- *
- * @ORM\Column(name="address", type="string", length=128, nullable=true)
- */
- private $address;
- /**
- * @var float
- *
- * @ORM\Column(name="latitude", type="float", nullable=true)
- */
- private $latitude;
- /**
- * @var float
- *
- * @ORM\Column(name="longitude", type="float", nullable=true)
- */
- private $longitude;
- /**
- * @var string
- *
- * @ORM\Column(name="phone", type="bigint", nullable=true)
- */
- private $phone;
- /**
- * @var int
- *
- * @ORM\Column(name="alarm", type="integer", nullable=true)
- */
- private $alarm;
- /**
- * @var string
- *
- * @ORM\Column(name="pwd", type="string", length=32, nullable=true)
- */
- private $pwd;
- /**
- * Constructor
- */
- public function __construct()
- {
- $this->deviceStatus = 0;
- }
- public function __toString(){
- return $this->deviceId;
- }
- /**
- * Get id
- *
- * @return integer
- */
- public function getId()
- {
- return $this->id;
- }
- /**
- * Set deviceId
- *
- * @param string $deviceId
- * @return Device
- */
- public function setDeviceId($deviceId)
- {
- $this->deviceId = $deviceId;
- return $this;
- }
- /**
- * Get deviceId
- *
- * @return string
- */
- public function getDeviceId()
- {
- return $this->deviceId;
- }
- /**
- * Set deviceStatus
- *
- * @param string $deviceStatus
- * @return Device
- */
- public function setDeviceStatus($deviceStatus)
- {
- $this->deviceStatus = $deviceStatus;
- return $this;
- }
- /**
- * Get deviceStatus
- *
- * @return string
- */
- public function getDeviceStatus()
- {
- return $this->deviceStatus;
- }
- /**
- * Set deviceRef
- *
- * @param string $deviceRef
- * @return Device
- */
- public function setDeviceRef($deviceRef)
- {
- $this->deviceRef = $deviceRef;
- return $this;
- }
- /**
- * Get deviceRef
- *
- * @return string
- */
- public function getDeviceRef()
- {
- return $this->deviceRef;
- }
- /**
- * Set address
- *
- * @param string $address
- * @return Device
- */
- public function setAddress($address)
- {
- $this->address = $address;
- return $this;
- }
- /**
- * Get address
- *
- * @return string
- */
- public function getAddress()
- {
- return $this->address;
- }
- /**
- * Set latitude
- *
- * @param float $latitude
- * @return Device
- */
- public function setLatitude($latitude)
- {
- $this->latitude = $latitude;
- return $this;
- }
- /**
- * Get latitude
- *
- * @return float
- */
- public function getLatitude()
- {
- return $this->latitude;
- }
- /**
- * Set longitude
- *
- * @param float $longitude
- * @return Device
- */
- public function setLongitude($longitude)
- {
- $this->longitude = $longitude;
- return $this;
- }
- /**
- * Get longitude
- *
- * @return float
- */
- public function getLongitude()
- {
- return $this->longitude;
- }
- /**
- * Set phone
- *
- * @param string $phone
- * @return Device
- */
- public function setPhone($phone)
- {
- $this->phone = $phone;
- return $this;
- }
- /**
- * Get phone
- *
- * @return string
- */
- public function getPhone()
- {
- return $this->phone;
- }
- /**
- * Set alarm
- *
- * @param int $alarm
- * @return Device
- */
- public function setAlarm($alarm)
- {
- $this->alarm = $alarm;
- return $this;
- }
- /**
- * Get alarm
- *
- * @return int
- */
- public function getAlarm()
- {
- return $this->alarm;
- }
- /**
- * Set pwd
- *
- * @param string $pwd
- * @return Device
- */
- public function setPwd($pwd)
- {
- $this->pwd = $pwd;
- return $this;
- }
- /**
- * Get pwd
- *
- * @return string
- */
- public function getPwd()
- {
- return $this->pwd;
- }
- }
위의 두 파일에서 InputStatus.php파일에서 Device.php파일의 $deviceId컬럼을 join하려고 합니다. join column방법(@ORM\ManyToOne)에 문제가 있는것 같아요.
감사합니다.
android 님 질문에 도움이 되셨나요??
조민우
2016.09.28 00:48:57
1
댓글
작성한 댓글 등록하기
작성해주신 엔티티로 반영해보니 아래와 같이 General error: 1005 (errorno: 150) 이 발생하네요
- [Doctrine\DBAL\Exception\DriverException]
- An exception occurred while executing 'ALTER TABLE input_status ADD CONSTRAINT FK_B7B4EC4194A4C7D4 FOREIGN KEY (device_id) REFERENCES device (device_id)':
- SQLSTATE[HY000]: General error: 1005 Can't create table 'symfony2_test.#sql-2c44_f' (errno: 150)
외래키에 대한 제약조건을 준수하지 못한 경우 토해내는 에러코드인데요
제약 조건 중에 참조하는 '부모 테이블'의 컬럼은 반드시 PK이거나 UNIQUE해야 한다는 제약조건이 있습니다.
아래와 같이 부모테이블(Devide)의 deviceId를 유니크로 변경해 보시기 바랍니다.
- /**
- * @var string
- *
- * @ORM\Column(name="device_id", type="string", length=32, unique=true)
- */
- private $deviceId;
건투를 빕니다!!!^_^
0
댓글
답변 작성
질문에 적합한 답변을 상세히 작성해 주시기 바랍니다.
답변이 찬성되면 태그평판 +2점이 적립, 반대되면 태그평판 -1점 차감됩니다.
답변이 채택되면 태그평판 +10점이 적립됩니다.