我创建了两个表。
Players Message
________ _________
id ----------- id
|
username -- sender_id
|
password -- receiver_id
sent_on
text
我到目前为止拥有的实体是:
AppBundle Entity Message
class Message
{
/**
* @var int
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="text", type="text")
*/
private $text;
/**
* @var DateTime
*
* @ORMColumn(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
*
* @ORMColumn(name="id", type="integer")
* @ORMId
* @ORMGeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORMColumn(name="username", type="string", length=100, unique=true)
*/
private $username;
/**
* @var string
*
* @ORMColumn(name="email", type="string", length=255, unique=true)
*/
private $email;
/**
* @var string
*
* @ORMColumn(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()
{
}
}
我应该如何连接这两个表?连接是多曼尼还是仅仅是多人lt; -> onetomany?我想实现与
相同的SELECT *
FROM messages, players
WHERE (players.id = messages.sender_id OR players.id = messages.receiver_id) AND players.id = 1
manytomany还是多人? 显然,这是一个许多方案,在多塔米尼场景中,您将有第三个表格,一个中间表。 如何连接这两个表 SQL到DQL sql: 注意,在DQL中,您需要在OOP中思考(通常是一个更自然的想法):class Message
{
//columns here
//...
/**
* @ORMManyToOne(target="Player", inversedBy="receivedMessages")
* @ORMJoinColumn(name="receiver_id",referencedColumnName="id")
*/
protected $receiver;
/**
* @ORMManyToOne(target="Player", inversedBy="sentMessages")
* @ORMJoinColumn(name="sender_id",referencedColumnName="id")
*/
protected $sender;
// create getters & setters
}
class Player implements UserInterface
{
//columns here
//...
/**
* @ORMOneToMany(target="Message", mappedBy="receiver")
*/
protected $receivedMessages;
/**
* @ORMOneToMany(target="Message", mappedBy="sender")
*/
protected $sentMessages;
// create getters & setters
}
SELECT *
FROM messages, players
WHERE (players.id = messages.sender_id OR players.id = messages.receiver_id)
AND players.id = 1
SELECT m, s, r
FROM AppBundleEntityMessage m
INNER JOIN m.sender s
INNER JOIN m.receiver r
WHERE s.id = 1 OR r.id = 1