2013-03-14 55 views
1

我在使用1:1關係的extbase中遇到問題。 我的模型「野獸」有一個鏈接到另一個模型「MissingBeast」,這是通過1:1關係實現的。我可以成功添加將MissingBeast對象添加到Beast對象。但我不知道如何重置它。如何在extbase模型中使用1:1關係重置屬性

下面的代碼顯示在Model野獸

/** 
* missingBeast 
* 
* @var Tx_Hobeast_Domain_Model_MissingBeast 
* @lazy 
*/ 
protected $missingBeast; 

/** 
* Returns the missingBeast 
* 
* @return Tx_Hobeast_Domain_Model_MissingBeast $missingBeast 
*/ 
public function getMissingBeast() { 
    return $this->missingBeast; 
} 

/** 
* Sets the missingBeast 
* 
* @param Tx_Hobeast_Domain_Model_MissingBeast $missingBeast 
* @return void 
*/ 
public function setMissingBeast(Tx_Hobeast_Domain_Model_MissingBeast $missingBeast) { 
    $this->missingBeast = $missingBeast; 
} 

屬性定義的模式野獸的數據庫表missingBeast值是missingBeast的只是ID。默認情況下爲0.

Ho可以在設置MissingBeast後將此ID重置爲0嗎? 我一直在努力,只是刪除丟失的野獸,像這樣:

$missingBeast = $this->service->missingBeastRepository->findByBeast($beast); 
    $this->service->missingBeastRepository->remove($missingBeast); 

但是,當我這樣做,下面的查詢卡住在一個無限循環。

$query = $this->createQuery(); 
return $query->matching($query->equals("uid", $beast->getMissingBeast()))->execute()->count(); 

我用錯字版本4.7.8

回答

4

只需將其設置爲NULL,這將刪除的關係,不要忘記更新資源庫中的模型。

$beast = $this->beastRepository->findByUid(345)->setMissingBeast(NULL); 
$this->beastRepository->update($beast); 

爲了能夠將該屬性設置爲NULL,則必須由默認的屬性設置爲NULL調整你的模型,並刪除類型提示在二傳手:

/** 
* missingBeast 
* 
* @var Tx_Hobeast_Domain_Model_MissingBeast 
* @lazy 
*/ 
protected $missingBeast = NULL; 

/** 
* Sets the missingBeast 
* 
* @param Tx_Hobeast_Domain_Model_MissingBeast $missingBeast 
* @return void 
*/ 
public function setMissingBeast($missingBeast) { 
    $this->missingBeast = $missingBeast; 
}