여러 고유 키를 기반으로하는 변환 된 Doctrine 2 엔티티를 만드는 방법

처남

저는 교리 2의 시나리오에서 다음을 구현하려고합니다.

  • 경주에서 차량을 운전하는 운전자가 있습니다.
  • 이 경주에서 차량은 사고를 당할 수 있습니다

Skipper에서 다음과 같이 보입니다.

여기에 이미지 설명 입력

Doctrine 2 주석 기반 엔터티로 내보내기하면 다음과 같이 표시됩니다 (Getter 및 setter가 차단됨).

Driver.php

<?php
namespace Racing\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Driver
{
    /**
     * @ORM\Id
     * @ORM\Column(type="bigint")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $Id;

    /**
     * @ORM\Column(type="text", nullable=false)
     */
    private $Name;
}

Vehicle.php

<?php
namespace Racing\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Vehicle
{
    /**
     * @ORM\Id
     * @ORM\Column(type="bigint")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $Id;

    /**
     * @ORM\Column(type="text", nullable=false)
     */
    private $Name;
}

Race.php

<?php
namespace Racing\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Race
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $Id;

    /**
     * @ORM\Column(type="text", nullable=false)
     */
    private $Name;
}

Accident.php

<?php
namespace Racing\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Accident
{
    /**
     * @ORM\Column(type="text", nullable=false)
     */
    private $Description;

    /**
     * @ORM\ManyToOne(targetEntity="Racing\Entity\RacingVehicle")
     * @ORM\JoinColumns({
     *     @ORM\JoinColumn(name="Racing_Vehicle_Driver_Id", referencedColumnName="Driver_Id", nullable=false),
     *     @ORM\JoinColumn(name="Racing_Vehicle_Vehicle_Id", referencedColumnName="Vehicle_Id", nullable=false)
     * })
     */
    private $RacingVehicle;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Racing\Entity\Race")
     * @ORM\JoinColumn(name="Race_Id", referencedColumnName="Id", nullable=false)
     */
    private $Race;
}

RacingVehicle.php

<?php
namespace Racing\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class RacingVehicle
{
    /**
     * @ORM\Column(type="integer", nullable=false)
     */
    private $Startnumber;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Racing\Entity\Driver")
     * @ORM\JoinColumn(name="Driver_Id", referencedColumnName="Id", nullable=false)
     */
    private $Driver;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Racing\Entity\Vehicle")
     * @ORM\JoinColumn(name="Vehicle_Id", referencedColumnName="Id", nullable=false)
     */
    private $Vehicle;
}

테스트 샘플은 다음과 같습니다.

// Get the entity manager
$sservicelocator = $this->getServiceLocator();
$entitymanager = $sservicelocator->get('doctrine.entitymanager.orm_default');

// Create a driver
$driver = new Driver();
$driver->setName("Michael Schumacher");
$entitymanager->persist($driver);

// Create a vehicle
$vehicle = new Vehicle();
$vehicle->setName("Ferrari");
$entitymanager->persist($vehicle);

// Create a race
$race = new Race();
$race->setName("Monaco");
$entitymanager->persist($race);

// Create a racing vehicle
$racingvehicle = new RacingVehicle();
$racingvehicle->setDriver($driver);
$racingvehicle->setVehicle($vehicle);
$racingvehicle->setStartnumber(42);
$entitymanager->persist($racingvehicle);

// Create an accident
$accident = new Accident();
$accident->setRace($race);
$accident->setRacingVehicle($racingvehicle);
$entitymanager->persist($accident); // <-------------- Error line

// Flush
$entitymanager->flush();

사고를 계속하려고하면 다음 오류가 발생합니다.

The given entity of type 'Racing\Entity\Accident' (Racing\Entity\Accident@0000000072a5fbd400007f1c433b761e) has no identity/no id values set. It cannot be added to the identity map.

그래서 내 질문 : RacingVehicle 및 Race를 기본 키로 사용하면서 실제로 자체 PHP 클래스 엔터티를 갖는 자체 엔터티 (사고)를 만들 수있는 방법 (다 대다 관계를 만들 수 있지만이 경우에는 자신의 사고 법인).

이울다

나는 당신이 DriverVehicleID를 모두 추가 할 수 있다고 생각합니다 RacingVehicle. 그러면 다음 Accident과 같이 보일 것입니다.

<?php
namespace Racing\Entity;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Accident
{
    //...

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Racing\Entity\Driver")
     * @ORM\JoinColumn(name="Driver_Id", referencedColumnName="Id", nullable=false)
     */
    private $Driver;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Racing\Entity\Vehicle")
     * @ORM\JoinColumn(name="Vehicle_Id", referencedColumnName="Id", nullable=false)
     */
    private $Vehicle;

    /**
     * @ORM\Id
     * @ORM\ManyToOne(targetEntity="Racing\Entity\Race")
     * @ORM\JoinColumn(name="Race_Id", referencedColumnName="Id", nullable=false)
     */
    private $Race;

    //...
}

이는 세 열의 복합 키를 얻는다는 것을 의미합니다. 이제 Driver_Id칼럼과 Vehicle_Id칼럼을 사용 RacingVehicle하여 사고 내부 를 해결할 수 있습니다 .

당신은 아마 (대한 인덱스 이후 인덱스 충돌의 원인이되므로 직접 매핑 할 수 있습니다 확실하지 경우 Driver_Id귀하의 식별자에 연결되어 Driver테이블의 인덱스 Vehicle_Id여러분의 식별자 Vehicle테이블) 그러나 당신이 할 수있는 예를 들어 부하 또는 프록시를 만들 당신을에 RacingVehicle라이프 사이클 이벤트이다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

특정 기준을 가진 중첩 된 엔티티로 nHibernate 엔티티를 반환하는 방법

분류에서Dev

중첩 된 Json 객체 / 배열을 키를 모르고 동적으로 키를 기반으로 여러 목록으로 변환하는 방법

분류에서Dev

Doctrine2 + Symfony2 : Symfony2에서 네임 스페이스가 지정된 Doctrine 엔티티를 사용하는 방법은 무엇입니까?

분류에서Dev

Dapper.Contrib을 사용하여 고유 키로 엔티티를 얻는 방법은 무엇입니까?

분류에서Dev

Magical Records는 하나의 고유 한 엔티티를 만드는 방법

분류에서Dev

symfony2 양식으로 제출 된 엔티티의 ID를 얻는 방법

분류에서Dev

2 개의 하위 엔티티를 기준으로 그룹화하고이 두 하위 엔티티의 합계를 얻는 방법은 무엇입니까?

분류에서Dev

ColdBox에서 엔티티를 고유 키로 설정하는 방법

분류에서Dev

Doctrine2 : 엔티티 클래스를 기반으로 엔티티 생성

분류에서Dev

Symfony2에서 확장 된 엔티티를 이해하는 방법

분류에서Dev

다 대다 관계와 관련된 하나의 조치로 여러 엔티티를 저장하는 방법 [Spring Boot 2, JPA, Hibernate, PostgreSQL]

분류에서Dev

엔티티 프레임 워크 코어 3.1.1을 사용하여 소유 된 엔티티 유형에 대한 복합 기본 키를 설정하는 방법은 무엇입니까?

분류에서Dev

DTO를 엔티티로 /에서 변환하는 위치,시기 및 방법

분류에서Dev

Symfony2에서 엔티티 유형의 ID를 변경하는 방법은 무엇입니까?

분류에서Dev

엔터티 양식에 제공된 답변을 기반으로 점수를 매기는 방법

분류에서Dev

이 엔터티 명명 된 쿼리를 만드는 방법

분류에서Dev

하나의 엔티티가 동일한 엔티티 유형의 2 개를 참조하는 엔티티 관계?

분류에서Dev

하위 엔티티의 필드를 기반으로 Hazelcast 맵에서 엔티티를 가져 오는 방법

분류에서Dev

WindowsAzure.MobileServices를 사용하여 하나의 엔터티를 쿼리하고 반환하는 방법

분류에서Dev

HTML에서 고유 한 엔터티 코드 문자를 만드는 방법

분류에서Dev

Symfony2 Doctrine2 Many To Many는 모든 엔티티를 관계 엔티티와 함께 가져옵니다.

분류에서Dev

확장 성 및 테스트 용이성을 고려하여 적절하게 DTO들에 도메인 엔티티를 변환하는 방법

분류에서Dev

세션에 저장된 엔티티를 새 엔티티로 전달하는 방법

분류에서Dev

webapi 엔티티 프레임 워크-중첩 된 클래스를 반환하는 가장 좋은 방법

분류에서Dev

유니 코드 값에 대한 명명 된 엔터티를 찾는 방법

분류에서Dev

symfony2 doctrine2가 새 엔티티를 플러시하지 않음

분류에서Dev

Symfony는 여러 엔티티 유형 OneToMany를 하나의 엔티티에 바인딩합니다.

분류에서Dev

기존 엔터티 MVC 2 EF에 엔터티를 추가하는 방법

분류에서Dev

Doctrine 사용자 정의 저장소를 확장하고 doctrine 엔티티 관리자에서 확장 저장소를 호출하는 방법

Related 관련 기사

  1. 1

    특정 기준을 가진 중첩 된 엔티티로 nHibernate 엔티티를 반환하는 방법

  2. 2

    중첩 된 Json 객체 / 배열을 키를 모르고 동적으로 키를 기반으로 여러 목록으로 변환하는 방법

  3. 3

    Doctrine2 + Symfony2 : Symfony2에서 네임 스페이스가 지정된 Doctrine 엔티티를 사용하는 방법은 무엇입니까?

  4. 4

    Dapper.Contrib을 사용하여 고유 키로 엔티티를 얻는 방법은 무엇입니까?

  5. 5

    Magical Records는 하나의 고유 한 엔티티를 만드는 방법

  6. 6

    symfony2 양식으로 제출 된 엔티티의 ID를 얻는 방법

  7. 7

    2 개의 하위 엔티티를 기준으로 그룹화하고이 두 하위 엔티티의 합계를 얻는 방법은 무엇입니까?

  8. 8

    ColdBox에서 엔티티를 고유 키로 설정하는 방법

  9. 9

    Doctrine2 : 엔티티 클래스를 기반으로 엔티티 생성

  10. 10

    Symfony2에서 확장 된 엔티티를 이해하는 방법

  11. 11

    다 대다 관계와 관련된 하나의 조치로 여러 엔티티를 저장하는 방법 [Spring Boot 2, JPA, Hibernate, PostgreSQL]

  12. 12

    엔티티 프레임 워크 코어 3.1.1을 사용하여 소유 된 엔티티 유형에 대한 복합 기본 키를 설정하는 방법은 무엇입니까?

  13. 13

    DTO를 엔티티로 /에서 변환하는 위치,시기 및 방법

  14. 14

    Symfony2에서 엔티티 유형의 ID를 변경하는 방법은 무엇입니까?

  15. 15

    엔터티 양식에 제공된 답변을 기반으로 점수를 매기는 방법

  16. 16

    이 엔터티 명명 된 쿼리를 만드는 방법

  17. 17

    하나의 엔티티가 동일한 엔티티 유형의 2 개를 참조하는 엔티티 관계?

  18. 18

    하위 엔티티의 필드를 기반으로 Hazelcast 맵에서 엔티티를 가져 오는 방법

  19. 19

    WindowsAzure.MobileServices를 사용하여 하나의 엔터티를 쿼리하고 반환하는 방법

  20. 20

    HTML에서 고유 한 엔터티 코드 문자를 만드는 방법

  21. 21

    Symfony2 Doctrine2 Many To Many는 모든 엔티티를 관계 엔티티와 함께 가져옵니다.

  22. 22

    확장 성 및 테스트 용이성을 고려하여 적절하게 DTO들에 도메인 엔티티를 변환하는 방법

  23. 23

    세션에 저장된 엔티티를 새 엔티티로 전달하는 방법

  24. 24

    webapi 엔티티 프레임 워크-중첩 된 클래스를 반환하는 가장 좋은 방법

  25. 25

    유니 코드 값에 대한 명명 된 엔터티를 찾는 방법

  26. 26

    symfony2 doctrine2가 새 엔티티를 플러시하지 않음

  27. 27

    Symfony는 여러 엔티티 유형 OneToMany를 하나의 엔티티에 바인딩합니다.

  28. 28

    기존 엔터티 MVC 2 EF에 엔터티를 추가하는 방법

  29. 29

    Doctrine 사용자 정의 저장소를 확장하고 doctrine 엔티티 관리자에서 확장 저장소를 호출하는 방법

뜨겁다태그

보관