Doctrine 2 - 在数据库中插入新项目

Rau*_*aul 4 doctrine-orm

我想做一些非常简单的事情......但是我做错了,我不知道是什么问题.我正在尝试使用Doctrine 2将新项目插入数据库:

$favouriteBook = new UserFavouriteBook;
$favouriteBook->user_id = 5;
$favouriteBook->book_id = 8;
$favouriteBook->created_at = new DateTime("now");

$this->_em->persist($favouriteBook);
$this->_em->flush();
Run Code Online (Sandbox Code Playgroud)

正如你所看到的......非常简单,但那,给我下一个错误:

Error: Message: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null
Run Code Online (Sandbox Code Playgroud)

显而易见,如果我在$ favouriteBook的"persist"和"flush"之前进行"转储",那么看起来都是正确的..

这是我的"favouriteBook"实体:

/** @Column(type="integer")
 * @Id
 */
private $user_id;

/** @Column(type="integer")
 * @Id
 */
private $book_id;

/**
 * @ManyToOne(targetEntity="Book", inversedBy="usersFavourite")
 * @JoinColumn(name="book_id", referencedColumnName="id")
 */
private $book;

/**
 * @ManyToOne(targetEntity="User", inversedBy="favouriteBooks")
 * @JoinColumn(name="user_id", referencedColumnName="id")
 */
private $user;

/** @Column(type="datetime") */
private $created_at;

public function __get($property) {
    return $this->$property;
}

public function __set($property, $value) {
    $this->$property = $value;
}  
Run Code Online (Sandbox Code Playgroud)

任何人都可以想象出问题是什么?..我不知道还有什么尝试..谢谢

bla*_*e24 6

我认为beberlei所说的是,在您的favouriteBook实体中,您不需要将user_id和book_id定义为类属性,b/c您已设置的书籍和用户属性已将这些属性识别为相关的连接列.此外,您尝试持久保存favouriteBook实体失败,因为您需要在favouriteBook实体中设置book和user实体关联,而不是外键.所以它会是:

$favouriteBook = new UserFavouriteBook;
$favouriteBook->book = $book; 
$favouriteBook->user = $user;
$favouriteBook->created_at = new DateTime("now");

$this->_em->persist($favouriteBook);
$this->_em->flush();
Run Code Online (Sandbox Code Playgroud)