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

时间:2011-02-28 08:50:42

标签: 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();

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

Error: Message: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'user_id' cannot be null

显然,如果我在$ 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;
}  

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

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:2)

您正在映射外键和关联。您必须修改关联而不是外键字段。将它们映射到它们的不良做法,你应该完全删除$ book_id和$ user_id。