如何正确设定学说之间的关系?

时间:2019-07-15 02:38:57

标签: doctrine-orm annotations

我创建了一个数据库,之后尝试检查./vendor/bin/doctrine orm:schema:update --dump-sql

这是一个简单的测试数据库:

CREATE TABLE `blogs` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Data for the table `blogs` */

insert  into `blogs`(`id`,`name`) values (1,'First blog');
insert  into `blogs`(`id`,`name`) values (2,'second bloc');

/*Table structure for table `user` */

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
  `blogid` int(10) unsigned NOT NULL,
  PRIMARY KEY (`id`),
  KEY `blogid` (`blogid`),
  CONSTRAINT `user_ibfk_1` FOREIGN KEY (`blogid`) REFERENCES `blogs` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

/*Data for the table `user` */

insert  into `user`(`id`,`name`,`blogid`) values (1,'user1',1);
insert  into `user`(`id`,`name`,`blogid`) values (2,'user2',2);

用户类:

/**
* @Entity @Table(name="user")
**/
class User
{

    /**
     * @var int
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     * @Column(type="integer", options={"unsigned":true})
     */
    private $id;

    /**
     * @var string
     * @Column(type="string", length=50)
     */
    private $name;


    /**
     * @var int
     * @Column(type="integer", options={"unsigned":true})
     * @ORM\ManyToOne(targetEntity="MyTest\Blog", inversedBy="blogid")
     * @ORM\JoinColumn(name="blogid", referencedColumnName="id")
     */
    private $blogid;

   //Getters setters...
}

博客类:

namespace MyTest;
use Doctrine\ORM\Mapping as ORM;

/**
 * @Entity @Table(name="blogs")
 **/
class Blog
{

    /**
     * @var int
     * @Id
     * @GeneratedValue(strategy="IDENTITY")
     * @Column(type="integer", options={"unsigned":true})
     * @ORM\OneToMany(targetEntity="MyTest\User", mappedBy="blogid")
     */
    private $id;

    /**
     * @var string
     * @Column(type="string", length=50)
     */
    private $name;

    //getters setters
}

,命令输出为:

ALTER TABLE blogs CHANGE name name VARCHAR(50) NOT NULL;
ALTER TABLE user DROP FOREIGN KEY user_ibfk_1;
DROP INDEX blogid ON user;
ALTER TABLE user CHANGE name name VARCHAR(50) NOT NULL;

为什么学说要放弃我的外键?我错过了什么?

0 个答案:

没有答案