如何在extbase模型中重置具有1:1关系的属性

时间:2013-03-14 12:09:01

标签: php typo3 extbase

我对extbase中的模型有1:1关系的问题。 我的模型“野兽”有一个链接到另一个模型“MissingBeast”,它通过1:1的关系实现。我可以成功添加将MissingBeast对象添加到Beast对象。但我不知道如何重置它。

以下代码显示了Model Beast中的属性定义

/**
 * 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;
}

Model Beast数据库表中missingBeast的值只是missingBeast的id。默认情况下为0。

我可以在设置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();

我正在使用Typo版本4.7.8

1 个答案:

答案 0 :(得分:4)

只需将其设置为NULL,这将删除关系,不要忘记更新存储库中的模型。

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

为了能够将属性设置为NULL,您必须通过默认情况下将属性设置为NULL来调整模型,并删除setter中的类型提示:

/**
 * 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;
}