이중 다 대일 관계를 교리 2의 동일한 테이블에 매핑하는 방법은 무엇입니까?

Ezio_

두 개의 테이블이 생성되었습니다.

Players               Message
________              _________
id      -----------   id
                   |
username           -- sender_id
                   |
password           -- receiver_id

                      sent_on

                      text

지금까지 내가 가진 엔티티는 다음과 같습니다.

AppBundle \ Entity \ Message

class Message
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="text", type="text")
 */
private $text;

/**
 * @var \DateTime
 *
 * @ORM\Column(name="sent_on", type="datetime")
 */
private $sentOn;


/**
 * Get id
 *
 * @return int
 */
public function getId()
{
    return $this->id;
}

/**
 * Set text
 *
 * @param string $text
 *
 * @return Message
 */
public function setText($text)
{
    $this->text = $text;

    return $this;
}

/**
 * Get text
 *
 * @return string
 */
public function getText()
{
    return $this->text;
}

/**
 * Set sentOn
 *
 * @param \DateTime $sentOn
 *
 * @return Message
 */
public function setSentOn($sentOn)
{
    $this->sentOn = $sentOn;

    return $this;
}

/**
 * Get sentOn
 *
 * @return \DateTime
 */
public function getSentOn()
{
    return $this->sentOn;
}

AppBundle \ Entity \ Player

class Player implements UserInterface
{
/**
 * @var int
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string
 *
 * @ORM\Column(name="username", type="string", length=100, unique=true)
 */
private $username;

/**
 * @var string
 *
 * @ORM\Column(name="email", type="string", length=255, unique=true)
 */
private $email;

/**
 * @var string
 *
 * @ORM\Column(name="password", type="string", length=255)
 */
private $password;


/**
 * Get id
 *
 * @return int
 */
public function getId()
{
    return $this->id;
}

/**
 * Set username
 *
 * @param string $username
 *
 * @return Player
 */
public function setUsername($username)
{
    $this->username = $username;

    return $this;
}

/**
 * Get username
 *
 * @return string
 */
public function getUsername()
{
    return $this->username;
}

/**
 * Set password
 *
 * @param string $password
 *
 * @return Player
 */
public function setPassword($password)
{
    $this->password = $password;

    return $this;
}

/**
 * Get password
 *
 * @return string
 */
public function getPassword()
{
    return $this->password;
}

/**
 * Returns the roles granted to the user.
 *
 * <code>
 * public function getRoles()
 * {
 *     return array('ROLE_USER');
 * }
 * </code>
 *
 * Alternatively, the roles might be stored on a ``roles`` property,
 * and populated in any number of different ways when the user object
 * is created.
 *
 * @return (Role|string)[] The user roles
 */
public function getRoles()
{
    return ['ROLE_USER'];
}

/**
 * Returns the salt that was originally used to encode the password.
 *
 * This can return null if the password was not encoded using a salt.
 *
 * @return string|null The salt
 */
public function getSalt()
{
    return null;
}

/**
 * Removes sensitive data from the user.
 *
 * This is important if, at any given point, sensitive information like
 * the plain-text password is stored on this object.
 */
public function eraseCredentials()
{

}

}

이 두 테이블을 어떻게 연결해야합니까? 연결이 ManyToMany입니까 아니면 ManyToOne <-> OneToMany입니까? 나는 같은 것을 달성하고 싶다.

SELECT *
FROM messages, players
WHERE (players.id = messages.sender_id OR players.id = messages.receiver_id) AND players.id = 1
Vinícius Fagundes

ManyToMany 또는 ManyToOne?

이것은 분명히 ManyToOne 시나리오입니다. ManyToMany 시나리오에서는 세 번째 테이블 인 중간 테이블이 있습니다.

이 두 테이블을 연결하는 방법

class Message
{

   //columns here
   //...

   /**
    * @ORM\ManyToOne(target="Player", inversedBy="receivedMessages")
    * @ORM\JoinColumn(name="receiver_id",referencedColumnName="id")
    */
   protected $receiver;

   /**
    * @ORM\ManyToOne(target="Player", inversedBy="sentMessages")
    * @ORM\JoinColumn(name="sender_id",referencedColumnName="id")
    */
   protected $sender;

   // create getters & setters

}

class Player implements UserInterface
{
    //columns here
    //...

   /**
    * @ORM\OneToMany(target="Message", mappedBy="receiver")
    */
    protected $receivedMessages;

   /**
    * @ORM\OneToMany(target="Message", mappedBy="sender")
    */
    protected $sentMessages;

    // create getters & setters

}

SQL에서 DQL로

SQL :

SELECT *
 FROM messages, players
 WHERE (players.id = messages.sender_id OR players.id = messages.receiver_id) 
  AND players.id = 1

DQL에서는 OOP로 생각해야합니다 (보통 훨씬 더 자연스러운 생각입니다).

 SELECT m, s, r
  FROM \AppBundle\Entity\Message m
  INNER JOIN m.sender s
  INNER JOIN m.receiver r
  WHERE s.id = 1 OR r.id = 1

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

일대 다 관계에 대한 중간 테이블을 갖는 방법은 무엇입니까?

분류에서Dev

다 대다 관계가있는 2 개의 MySQL 테이블에 대한 기본 관계를 생성하는 방법은 무엇입니까?

분류에서Dev

필드 수를 비교하여 동일한 테이블에서 쿼리하는 방법은 무엇입니까?

분류에서Dev

JSP 페이지에서 일대 다 관계를 매핑하고 페이지를 제출하는 동안 저장하는 방법은 무엇입니까?

분류에서Dev

UPDATE 쿼리에서 동일한 테이블의 데이터를 사용하는 방법은 무엇입니까?

분류에서Dev

mysql의 한 테이블에서 다른 효과로 동일한 값을 가진 두 필드를 비교하는 방법은 무엇입니까?

분류에서Dev

동일한 최대 절전 모드 엔티티를 다른 체계의 여러 테이블에 매핑하는 방법이 있습니까?

분류에서Dev

단일 쿼리에서 서로 다른 테이블의 값을 집계하는 방법은 무엇입니까?

분류에서Dev

일대 다 관계를 스트리밍하고 매핑하는 방법은 무엇입니까?

분류에서Dev

동일한 데이터베이스의 한 테이블에서 다른 테이블로 데이터를 복사하는 방법은 무엇입니까?

분류에서Dev

동일한 테이블에서 N : N 및 1 : N 관계를 생성하는 방법은 무엇입니까?

분류에서Dev

Hibernate에서 세 번째 테이블을 사용하여 두 엔티티 사이의 일대 다 연결을 매핑하는 방법은 무엇입니까?

분류에서Dev

일대 다 관계 : 자식 테이블의 단일 행에서 여러 열을 반환하는 방법은 무엇입니까?

분류에서Dev

일대 다 관계의 속성에 액세스하고 다른 테이블보기로 전달하는 방법은 무엇입니까?

분류에서Dev

다 대다 관계에서 열의 모든 동일한 값을 찾고 다른 세 테이블과 테이블을 조인하는 방법은 무엇입니까?

분류에서Dev

3 다 대다 관계를 매끄럽게 : 테이블의 모든 요소와 존재하는 경우 관계를 얻는 방법은 무엇입니까?

분류에서Dev

mysql-동일한 테이블과 열에서 2 개의 다른 요소 수를 합산하여 하나로 표시하는 방법은 무엇입니까?

분류에서Dev

EF에서 단항 관계를 별도의 테이블에 매핑하는 방법은 무엇입니까?

분류에서Dev

동일한 객체의 일부이지만 AngularJs에서 DOM의 다른 부분에 배치 된 데이터를 관리하는 방법은 무엇입니까?

분류에서Dev

일대 다 관계의 여러 계층에 대해 DAL을 처리하는 방법은 무엇입니까?

분류에서Dev

SQL에서 동일한 ID와 다른 테이블을 가진 열의 합계를 얻는 방법은 무엇입니까?

분류에서Dev

db2 SQL, 하나의 테이블이있는 동일한 쿼리에서만 최소값과 최대 값을 얻는 방법은 무엇입니까?

분류에서Dev

여러 테이블에 대한 쿼리 결과를 비교하는 방법은 무엇입니까?

분류에서Dev

orientDB의 동일한 테이블에서 두 개의 다른 에지 데이터를 검색하는 방법은 무엇입니까?

분류에서Dev

orientDB의 동일한 테이블에서 두 개의 다른 에지 데이터를 검색하는 방법은 무엇입니까?

분류에서Dev

Oracle SQL-동일한 테이블에서 두 세트 사이의 행 수를 비교하는 방법은 무엇입니까?

분류에서Dev

동일한 데이터 세트에서 다른 카테고리의 총계를 찾는 방법은 무엇입니까?

분류에서Dev

대상 양식의 테이블에 일치하는 항목이 없을 때 두 양식 간의 일대 다 관계에서 데이터를 채우는 방법은 무엇입니까?

분류에서Dev

단일 데이터베이스에 대한 다중 스레드 액세스를 관리하는 다양한 방법은 무엇입니까?

Related 관련 기사

  1. 1

    일대 다 관계에 대한 중간 테이블을 갖는 방법은 무엇입니까?

  2. 2

    다 대다 관계가있는 2 개의 MySQL 테이블에 대한 기본 관계를 생성하는 방법은 무엇입니까?

  3. 3

    필드 수를 비교하여 동일한 테이블에서 쿼리하는 방법은 무엇입니까?

  4. 4

    JSP 페이지에서 일대 다 관계를 매핑하고 페이지를 제출하는 동안 저장하는 방법은 무엇입니까?

  5. 5

    UPDATE 쿼리에서 동일한 테이블의 데이터를 사용하는 방법은 무엇입니까?

  6. 6

    mysql의 한 테이블에서 다른 효과로 동일한 값을 가진 두 필드를 비교하는 방법은 무엇입니까?

  7. 7

    동일한 최대 절전 모드 엔티티를 다른 체계의 여러 테이블에 매핑하는 방법이 있습니까?

  8. 8

    단일 쿼리에서 서로 다른 테이블의 값을 집계하는 방법은 무엇입니까?

  9. 9

    일대 다 관계를 스트리밍하고 매핑하는 방법은 무엇입니까?

  10. 10

    동일한 데이터베이스의 한 테이블에서 다른 테이블로 데이터를 복사하는 방법은 무엇입니까?

  11. 11

    동일한 테이블에서 N : N 및 1 : N 관계를 생성하는 방법은 무엇입니까?

  12. 12

    Hibernate에서 세 번째 테이블을 사용하여 두 엔티티 사이의 일대 다 연결을 매핑하는 방법은 무엇입니까?

  13. 13

    일대 다 관계 : 자식 테이블의 단일 행에서 여러 열을 반환하는 방법은 무엇입니까?

  14. 14

    일대 다 관계의 속성에 액세스하고 다른 테이블보기로 전달하는 방법은 무엇입니까?

  15. 15

    다 대다 관계에서 열의 모든 동일한 값을 찾고 다른 세 테이블과 테이블을 조인하는 방법은 무엇입니까?

  16. 16

    3 다 대다 관계를 매끄럽게 : 테이블의 모든 요소와 존재하는 경우 관계를 얻는 방법은 무엇입니까?

  17. 17

    mysql-동일한 테이블과 열에서 2 개의 다른 요소 수를 합산하여 하나로 표시하는 방법은 무엇입니까?

  18. 18

    EF에서 단항 관계를 별도의 테이블에 매핑하는 방법은 무엇입니까?

  19. 19

    동일한 객체의 일부이지만 AngularJs에서 DOM의 다른 부분에 배치 된 데이터를 관리하는 방법은 무엇입니까?

  20. 20

    일대 다 관계의 여러 계층에 대해 DAL을 처리하는 방법은 무엇입니까?

  21. 21

    SQL에서 동일한 ID와 다른 테이블을 가진 열의 합계를 얻는 방법은 무엇입니까?

  22. 22

    db2 SQL, 하나의 테이블이있는 동일한 쿼리에서만 최소값과 최대 값을 얻는 방법은 무엇입니까?

  23. 23

    여러 테이블에 대한 쿼리 결과를 비교하는 방법은 무엇입니까?

  24. 24

    orientDB의 동일한 테이블에서 두 개의 다른 에지 데이터를 검색하는 방법은 무엇입니까?

  25. 25

    orientDB의 동일한 테이블에서 두 개의 다른 에지 데이터를 검색하는 방법은 무엇입니까?

  26. 26

    Oracle SQL-동일한 테이블에서 두 세트 사이의 행 수를 비교하는 방법은 무엇입니까?

  27. 27

    동일한 데이터 세트에서 다른 카테고리의 총계를 찾는 방법은 무엇입니까?

  28. 28

    대상 양식의 테이블에 일치하는 항목이 없을 때 두 양식 간의 일대 다 관계에서 데이터를 채우는 방법은 무엇입니까?

  29. 29

    단일 데이터베이스에 대한 다중 스레드 액세스를 관리하는 다양한 방법은 무엇입니까?

뜨겁다태그

보관