2011-02-28 63 views
4

我試圖做一些非常簡單的事情..但我做錯了,我不知道是什麼問題。只是我想新的項目使用Doctrine 2插入到數據庫:學說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 

Obviosly,如果我做一個「堅持」和$ favouriteBook的「刷新」前「拋售」,一切看起來是正確的..

這是我的「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; 
} 

任何人都可以想象出什麼問題? ..我不知道還有什麼嘗試..謝謝

回答

6

我認爲beberlei所說的是,在您的favouriteBook實體中,您不需要將user_id和book_id定義爲類屬性,b/c您已設置的book和user屬性已將它們識別爲相關聯接列。另外,由於您需要在favouriteBook實體中設置書籍和用戶實體關聯,而不是外鍵,因此您試圖保留favouriteBook實體失敗。所以它會是:

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

$this->_em->persist($favouriteBook); 
$this->_em->flush(); 
+0

是的,你們倆都是對的:) – Raul

+0

@ blacktie24我遇到了同樣的問題,並且有點理解你和berberlei的回答。但是,favouriteBook實體類中的用戶和書籍屬性聲明爲'private',因此它們需要更改爲'public'嗎?另外我不確定這些相關對象是如何填充的,$ book和$ user包含的是什麼? – Sid

+0

@Sid,是的,如果您要直接分配屬性,則必須將屬性更改爲public,而不是像$ favouriteBook-> setBook($ book)那樣使用setter。 $ book和$ user包含什麼並不重要,它們只是favouriteBook實體與之關聯的其他實體。 – blacktie24

2

您正在映射外鍵和關聯。您必須修改關聯而不是外鍵字段。將它們映射到它們的壞習慣,你應該完全刪除$ book_id和$ user_id。

+0

嗨,謝謝你的建議。但是,我不明白你的意思。 那麼,你的意思是我必須這樣更新? $ favouriteBook-> user = $ user和$ favouriteBook-> book = $ book?我會試試這個。 而即將刪除$ book_id和$ user_id ..如果我刪除,我該怎麼做關聯?兩者都是主要關鍵的事實是因爲我需要這個「必要條件」來成爲一個實體。 謝謝你的時間。 – Raul