【问题标题】:How do I create a table with the primary keys of 2 other tables in symfony2?如何使用 symfony2 中其他 2 个表的主键创建一个表?
【发布时间】:2014-11-14 09:25:25
【问题描述】:

我有这样一个场景,我有 2 个表,并且想要创建第三个表,其列仅是 2 个表的 2 个主键。这两个表是:-

Events.php
<?php

namespace InstituteEvents\StudentBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="institute_event_details")
 */

class Events
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $eid;

/**
 * @ORM\Column(name="eventname",type="string", length=50)
 */
protected $eventname;

public function getEId() {
    return $this->eid;
}

public function getEventname()
{
    return $this->eventname;
}

public function setEventname($eventname)
{
    $this->eventname = $eventname;

    return $this;
}

}   

学生.php

namespace InstituteEvents\StudentBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Symfony\Component\Validator\Constraints as Assert;
use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="institute_student_details")
 */
class Student extends BaseUser
{
/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 * @ORM\GeneratedValue(strategy="AUTO")
 */
protected $uid;

/**
 * @ORM\Column(name="firstname",type="string", length=50)
 * @Assert\NotBlank(),
 * @Assert\Length(
 *      min = 3,
 *      max = 100,
 *      minMessage = "Your name must be at least {{ limit }} characters long",
 *      maxMessage = "Your name cannot be longer than {{ limit }} characters long")
 * @Assert\Regex(
 *     pattern="/\d/",
 *     match=false,
 *     message="Your name cannot contain a number")
 */
protected $firstname;

/**
 * @ORM\Column(name="lastname",type="string", length=50)
 * @Assert\Length(
 *      min = 3,
 *      max = 100,
 *      minMessage = "Your name must be at least {{ limit }} characters long",
 *      maxMessage = "Your name cannot be longer than {{ limit }} characters long")
 * @Assert\Regex(
 *     pattern="/\d/",
 *     match=false,
 *     message="Your name cannot contain a number")
 */
protected $lastname;

/**
 * @Assert\NotBlank()
 * @Assert\Email()
 * 
 */
protected $email;

/**
 * Plain password. Used for model validation. Must not be persisted.
 * @Assert\NotBlank()
 * 
 */
protected $plainPassword;

public function getFirstname()
{
    return $this->firstname;
}

public function getLastname()
{
    return $this->lastname;
}

public function setFirstname($firstname)
{
    $this->firstname = $firstname;

    return $this;
}

public function setLastname($lastname)
{
    $this->lastname = $lastname;

    return $this;
}

function getEmail() {
    return $this->email;
}

function getPlainPassword() {
    return $this->plainPassword;
}

function setEmail($email) {
    $this->email = $email;
}

function setPlainPassword($plainPassword) {
    $this->plainPassword = $plainPassword;
}

public function __construct()
{
    parent::__construct();
    // your own logic
}
}

现在,我想在数据库中创建一个新表“订阅”,其列只有“uid”和“eid”。现在很多“学生”可以注册很多“活动”。这些表之间的关系是什么,我在哪里指定这些:-

订阅.php

<?php

namespace InstituteEvents\StudentBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="institute_subscription_details")
 */

class Subscription
{

/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 */
protected $uid;

/**
 * @ORM\Id
 * @ORM\Column(type="integer")
 */
protected $eid;

 public function getUId() {
    return $this->uid;
}

 public function getEId() {
    return $this->eid;
}
}   

如何在数据库中创建这些表以及这些表之间的关系是什么,条件是:- 许多“学生”可以注册许多“事件”并且许多“事件”可以有许多“学生”?? ??

【问题讨论】:

    标签: php mysql sql-server database symfony


    【解决方案1】:

    我不知道你为什么需要额外的实体。 DoctrineORM 提供多对多双向关系。

    http://doctrine-orm.readthedocs.org/en/latest/reference/association-mapping.html#many-to-many-bidirectional

    【讨论】:

    • 因为我的要求是我们创建第三张表
    • 多对多关系创建第三个表来存储关系(没有其他方法可以实现)。有什么问题?
    • 感谢您的帮助、时间和链接。有效。我仍然无法投票给答案,否则我会投票
    • @sachintendulkar 如果您想接受,可以在答案前面打勾。
    • 是的,忘记了。现在已经打勾了。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2022-12-29
    • 1970-01-01
    相关资源
    最近更新 更多