我正在努力使事情变得非常简单..但我做错了,我不知道是什么问题。我正在尝试使用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;
}
任何人都可以想象出问题是什么? ..我不知道还有什么尝试..谢谢
答案 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。